Ist es in Windows-Batchdateien möglich, mehr als einen Befehl in einer einzigen FOR
Schleife aufzurufen ? Angenommen, ich möchte den Dateinamen drucken und nach dem Löschen:
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.
Ich weiß, dass ich es in diesem Fall lösen könnte, indem ich zwei verschiedene FOR-Schleifen mache: eine zum Anzeigen des Namens und eine zum Löschen der Datei, aber ist es möglich, dies nur in einer Schleife zu tun?
windows
batch-file
cmd
Marco Demaio
quelle
quelle
for %i in (1 2 3) do echo %i & echo foo
druckt, was ich erwarten würde: "1", "foo", "2", "foo", "3", "foo" (in separaten Zeilen).&&
eher sein als&
?&&
schlägt fehl, wenn der erste Befehl fehlschlägt,&
führt den zweiten Befehl trotzdem aus .DO
-parens ein nicht entkoppelter Paren vorhanden ist. Sie können ihnen entkommen, indem Sie ihnen ein anhängen^
.Die Verwendung
&
ist für kurze Befehle in Ordnung, aber diese einzelne Zeile kann sehr schnell sehr lang werden. Wechseln Sie in diesem Fall zur mehrzeiligen Syntax.Platzierung
(
und)
Angelegenheiten. Die runden Klammern danachDO
müssen in derselben Zeile stehen, sonst ist die Batchdatei falsch.Siehe
if /?|find /V ""
für Details.quelle
DO
NICHT in die nächste Zeile gesetzt werden darf, da sie sonst die Batch-Datei bremst. Wenn ich im Code eine for-Schleife schreibe, setze ich normalerweise die geschweifte Klammer in die{
nächste Zeile.SilverSkin und Anders sind beide richtig. Sie können Klammern verwenden, um mehrere Befehle auszuführen. Sie müssen jedoch sicherstellen, dass die Befehle selbst (und ihre Parameter) keine Klammern enthalten.
cmd
sucht gierig nach der ersten schließenden Klammer, anstatt verschachtelte Sätze von Klammern ordnungsgemäß zu behandeln. Dies kann dazu führen, dass der Rest der Befehlszeile nicht analysiert werden kann, oder dass einige der Klammern an die Befehle übergeben werden (zDEL myfile.txt)
. B. ).Eine Problemumgehung besteht darin, den Körper der Schleife in eine separate Funktion aufzuteilen. Beachten Sie, dass Sie wahrscheinlich um den Funktionskörper herum springen müssen, um ein "Durchfallen" zu vermeiden.
quelle
C:\Program Files (x86)
.