2016-05-12 8 views
-2

Ich versuche, den Befehl zu verwenden: "set n = 0" "für/f %% i in ('dir/a: d/b') tun (set/a n + = 1) & (set var% n% = %% i) "- Es setzt immer %% i in var0, aber ich kann sehen, dass" set n + = 1 "funktioniert. Wie kann ich "n" verwenden, um für jede Runde eine andere Variable zu erstellen?Verwenden Sie eine Zählvariable innerhalb eines FOR-Befehls in BATCH

Wie: var1, var2, var3 .. für jeden Ordner im Verzeichnis.

Unabhängig von der Antwort, ich brauche 'n' zu halten, wie oft der Befehl ausgeführt wurde (so dass das Programm die Menge der Ordner kennen wird) (Bearbeiten: Ja, ich weiß, mein Beispiel bietet dies, ich meinte, wenn jemand änderte den Code, der 'n' noch auf die Anzahl der Läufe gesetzt werden musste)

Edit: Ich habe die Seite überprüft: Arrays, linked lists and other data structures in cmd.exe (batch) script Und fand es nützlich, aber ich verstehe nicht wirklich die ordnungsgemäße Verwendung. Könnte mir bitte jemand helfen, indem ich meinen Code für die Arbeit mit DelayedExpansion festlege oder besser erläutere, wie man ihn implementiert?

Bearbeiten: Jungs! Dies ist kein Duplikat. Ich habe versucht, DelayedExpansion zu verwenden und konnte es nicht zum Laufen bringen. Mein Problem war Ursache von meinem Texteditor, den ich benutzte (NotePad ++), deshalb dachte ich, dass ich DelayedExpansion falsch verwendete und um Klärung bat. Am Ende habe ich es selbst repariert, nachdem die Antwort unten gezeigt hat, dass mein Code korrekt war.

+2

Wenn ich einen Nickel für jedes Mal hatte, dass jemand [verzögerte Expansion] verwenden musste (http://stackoverflow.com/a/30284028/4158862), konnte ich in Rente gehen. – SomethingDark

+5

Siehe: http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990 – Aacini

+0

'n' hält das richtige Anzahl der Läufe - setze 'echo% n%' nach der 'for' Schleife und du wirst sehen ... – aschipfl

Antwort

1

Wenn Sie eine Variable innerhalb eines Satzes von Klammern erstellen oder aktualisieren, müssen Sie die verzögerte Erweiterung verwenden und auf die Variable mit !variable! anstelle von %variable% verweisen. Wie Stephan in his answer sagte, liegt dies daran, dass der cmd-Interpreter einen gesamten Codeblock (alles in einem Satz von Klammern) gleichzeitig analysiert und Variablen mit ihren Werten zur Parserzeit ersetzt, während Variablen, die mit der verzögerten Erweiterungsmethode referenziert werden zur Laufzeit ausgewertet.

+0

Ich habe das versucht, aber 'set var' gibt 'var! n! = Windows' zurück (Windows ist der letzte Ordner in die dir) haben setlocal und enabledelayedexpansion – ThatCyanTypo

+0

@ ThatCyanTypo - Dann haben Sie es falsch gemacht. Kopieren und fügen Sie meinen Code genau so ein, wie ich ihn geschrieben habe. – SomethingDark

+0

Ich fand das Problem, ich hatte setlocal und enabledelayedexpansion in verschiedenen Zeilen aufgrund meiner Syntax Highlighter in NotePad ++ (es zeigte nicht als Arbeitsbefehl, wenn sie in der gleichen Zeile waren) – ThatCyanTypo

Verwandte Themen