2016-06-27 10 views
0

Ich versuche, die erste Datei aus dem Verzeichnis zu sammeln und dann die Datei zu verarbeiten. Aber beim zweiten Mal, wenn der Betrieb und die Verarbeitung der Batch-Datei Ich bin nicht in der Lage, die Werte in den Variablen zu speichern, für die DateinamenWindows-Batch: Variable zurücksetzen

Unten ist der Beispielcode:

for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
set filename=%%i 
set newname=%filename:~14% 
set transname=%filename:~25% 
goto tests 
) 
:tests 
echo %filename% 
echo %newname% 
echo %transname% 

Ich bin sicher, wir müssen benutze etwas namens SETLOCAL, aber ich kann es nicht in dem obigen Code machen.

Irgendwelche Hilfe!

+1

der berühmte [verzögerte Expansion Falle] (http://stackoverflow.com/a/30284028/2152082) ... – Stephan

Antwort

1

Sie sollten die prozentuale Erweiterung innerhalb von Blöcken vermeiden, auch für Blöcke, da die Erweiterung nur einmal auftritt, wenn der Block geparst wird.

Wie @Stephan bemerkte, könnten Sie auch verzögerte Expansion innerhalb von Blöcken verwenden.

setlocal EnableDelayedExpansion 
for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
    set filename=%%i 
    set newname=!filename:~14! 
    set transname=!filename:~25! 

    goto :tests # Get only the first file 
) 
+0

für "sammeln erste Datei", die 'goto' die Schleife brechen soll. – Stephan

+0

@Stephan ja. Ich habe 'goto' anstelle von' call' modifiziert. Danke – nawazlj

+0

@Stephan Sie haben Recht, ich sollte die Texte sorgfältiger lesen – jeb