Ich habe eine Frage zu if - else Struktur in einer Batchdatei. Jeder Befehl wird einzeln ausgeführt, aber ich konnte "if - else" -Blöcke nicht sicher verwenden, sodass diese Teile meines Programms nicht funktionieren. Wie kann ich diese Teile zum Laufen bringen? Danke dir.
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
ELSE IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
batch-file
if-statement
gleichnamig
quelle
quelle
{}
Schaltfläche klicken . Dies hilft, Beiträge besser lesbar zu machen und vermeidet Probleme mit dem Markup. Als Antwort auf Ihre Frage tut es jetzt! Wenn Sie eine Frage schreiben, sehen Sie unten eine Vorschau, damit Sie sehen können, wie sie nach dem Posten aussehen wird.Antworten:
Ihre Syntax ist falsch. Sie können nicht verwenden
ELSE IF
. Es scheint, dass Sie es sowieso nicht wirklich brauchen. Verwenden Sie einfach mehrereIF
Anweisungen:Hervorragende Referenz für Batchdateien: http://ss64.com/nt/if.html
quelle
&&
mehrerenif
Bedingungen verwenden können. Sehen Sie sich meine alternative Syntax an.IF condition1 IF condition 2
ELSE IF
? Es funktioniert gut unter Win7. Siehe Beispiel: paste2.org/G8tMae92Ich denke, in der Frage und in einigen Antworten gibt es ein wenig Verwirrung über die Bedeutung dieses Pseudocodes in DOS: WENN A WENN BX SONST Y. Es bedeutet nicht WENN (A und B) DANN X SONST Y, sondern in Tatsache bedeutet WENN A (WENN B DANN X SONST Y). Wenn der Test von A fehlschlägt, wird das gesamte innere Wenn-Sonst ignoriert.
Wie eine der genannten Antworten zeigt, kann in diesem Fall nur einer der Tests erfolgreich sein, sodass das 'else' nicht benötigt wird. Dies funktioniert natürlich nur in diesem Beispiel. Es ist keine allgemeine Lösung für if-else.
Es gibt viele Möglichkeiten, dies zu umgehen. Hier sind ein paar Ideen, alle sind ziemlich hässlich, aber hey, das ist (oder war zumindest) DOS!
quelle
set
brauchen keine Prozentzeichen. sollte seinset one=1
AFAIK Sie können ein
if else
In-Batch nicht wie in anderen Sprachen durchführen, es muss verschachtelt seinif
.Wenn Sie verschachtelte
if
Stapel verwenden, sieht Ihr Stapel so ausoder wie James vorgeschlagen hat, verketten Sie Ihre
if
, aber ich denke, die richtige Syntax istquelle
if else
, vor allem in C-ähnlichen Sprachen ist auch nur eine verschachtelteif
. Sie müssen sie auch nicht mit Blöcken in Batch-Dateien verschachteln.else if
Kombination nur verschachtelt ist,if
aber ich dachte nicht, dass Sie diese Schlüsselwörter zusammen in Stapeln verwenden können, wie Sie es in C-Sprachen können.Ich glaube, Sie können etwas wie verwenden
quelle
do foo
und seindo bar
.IF (test) (command) ELSE IF (test) (command)
, implizieren SieIF (test) (command) ELSE (IF (test) (command))
. Dies mag manchmal funktionieren, aber wenn Sie glauben, dass es sich um eine unter DOS akzeptable Programmierstruktur handelt, ist dies eine PITA, die bei einem Fehler behoben werden kann.Ein bisschen spät und vielleicht immer noch gut für komplexe if-Bedingungen, da ich einen "done" -Parameter hinzufügen möchte, um eine if-then-else-Struktur beizubehalten:
quelle
IF...ELSE IF
Konstrukte funktionieren sehr gut in Batchdateien, insbesondere wenn Sie nur einen bedingten Ausdruck in jeder IF-Zeile verwenden:In Ihrem Beispiel verwenden Sie das
IF...AND...IF
Typkonstrukt, bei dem zwei Bedingungen gleichzeitig erfüllt sein müssen. In diesem Fall können Sie weiterhin dasIF...ELSE IF
Konstrukt verwenden, jedoch mit zusätzlichen Klammern, um Unsicherheiten für die nächste ELSE-Bedingung zu vermeiden:Das obige Konstrukt entspricht:
Die Verarbeitungssequenz von Stapelbefehlen hängt von der Analysereihenfolge von CMD.exe ab . Stellen Sie einfach sicher, dass Ihr Konstrukt dieser logischen Reihenfolge folgt, und in der Regel funktioniert es. Wenn Ihr Batch-Skript von Cmd.exe fehlerfrei verarbeitet wird, bedeutet dies, dass dies das richtige Konstrukt ist (dh von Ihrer OS Cmd.exe-Version unterstützt wird), auch wenn jemand etwas anderes gesagt hat.
quelle
Hier ist mein Codebeispiel für if..else..if
, die Folgendes tun
Benutzer zur Eingabe des Prozessnamens auffordern
Wenn der Prozessname ungültig
ist, wird er an den Benutzer geschrieben
Wenn der Prozessname Dienste
ist, wird er an den Benutzer geschrieben
Wenn der Prozessname gültig ist und keine Dienste
, wird er an den Benutzer geschrieben
Der Prozess wurde über beendet
taskill
Also nannte ich es Process Killer.bat
Hier ist mein Code:
quelle
Hier ist, wie ich mit anderen Situationen umgegangen bin
Beachten Sie, dass es nicht dasselbe ist wie der if-elseif-Block wie die anderen Programmiersprachen wie C ++ oder Java, aber es wird das tun, was Sie tun müssen
quelle