webentwicklung-frage-antwort-db.com.de

cmd: wenn es A und B gibt dann

Was ist die einfachste und/oder am besten lesbare Methode für IF mit AND in einer CMD-Shell? Im Pseudocode:

IF EXIST file1 AND file2:
   then do stuff
ELSE: 
   do something else

Dieser Q muss irgendwo in SO sein, aber meine Suchmaschine funktioniert für diesen nicht. Es tut uns leid

6
matt wilkie

Angenommen, Sie sprechen über DOS/Windows-Batch-Dateien, dann möchten Sie etwa Folgendes:

SET do_stuff=false
IF EXIST file1 IF EXIST file2 SET do_stuff=true
IF "%do_stuff%"=="true" (
    REM do stuff
) ELSE (
    REM do something else
)

Der Grund für die Hässlichkeit ist, dass die DOS - Batchdatei if - Anweisungen keine und und oder - Operatoren enthalten. Sie müssen daher entweder verschachtelte if - Anweisungen schreiben (was zu doppeltem Code in der Datei führen kann) then und else Klauseln), oder erfassen Sie das Ausdrucksergebnis in einer Variablen und führen Sie dann eine Anweisung if für ihren Wert aus (viel mehr Zeilen). Ich bevorzuge den zweiten Ansatz, um doppelten Code zu vermeiden. Vielleicht ist das alles ein Sicherheitsmerkmal. :)

Ich habe einige gute Beispiele gefunden hier und hier (SO, sogar) . Sie können aber auch einfach das in die Shell integrierte Hilfesystem (help if oder if /? IIRC) verwenden.

14
Randall Cook

Eine Alternative zu dem eher netten Vorschlag von @Randall Cook könnte so aussehen:

IF EXIST file1 IF EXIST file2 (
  do stuff
  GOTO cont
)
do something else

:cont
get on with other stuff
5
Andriy M
IF EXIST A (
    IF EXIST B (
        ECHO A and B exist
        )
    )
4
Shirulkar

Ich habe ein bisschen gelernt, seit @ RandallCooks Antwort das Beste für mich war. Folgendes würde ich jetzt verwenden:

@echo off
IF EXIST "File1" IF EXIST "File2" GOTO :do_stuff
GOTO :not_exist
GOTO :EOF

:do_stuff
    echo File1 and File2 exist.
    echo -- Doing stuff here...
    goto :EOF

:not_exist
    echo  Condition not met, not doing stuff.
    goto :EOF

:EOF eine vordefinierte Bezeichnung, die die aktuelle Unterroutine oder das aktuelle Skript beendet.

Für diejenigen, die CALL gegenüber GOTO bevorzugen, weil es in längeren Skripten zu einem saubereren Code führt, müssen wir die Dinge ein wenig komplizieren, sind aber dennoch lesbar:

@echo off
:: Successful CD resets errorlevel to 0, in case it was already set this Shell
cd
IF EXIST "File1" IF EXIST "File2" CALL :do_stuff
IF ERRORLEVEL 10 GOTO :EOF
CALL :not_exist
GOTO :EOF

:do_stuff
    echo File1 and File2 exist.
    echo -- Doing stuff here...
    exit /b 10
    goto :EOF

:not_exist
    echo  Condition not met, not doing stuff.
    goto :EOF
1
matt wilkie
set /p k="Please enter Choice : "

if "% k%" == "A" goto A if "% k%" == "B" goto B

: A Echo "Hallo von A": B Echo "Hallo von B"

0
Sheshan Gamage