2016-09-01 10 views
0

Ich bin sehr amateur auf Batch-Skript, versucht, eine Batch-Datei zu schreiben, um meine Arbeit zu beschleunigen. Aber jedes Mal, wenn ich diese Batch-Datei ausführe, verwendet es die Argumente der vorherigen Ausführung (anstelle der aktuellen Argumente)Batch-Datei verwendet die Argumente der vorherigen Ausführung

Ich kann die folgenden Zeilen verwenden, um den Fehler zu wiederholen.

REM source code begin 
@echo off 

set aim=%1 

if "%aim%"=="download" (
    set taskShortName=%2 
    set action=%3 
    echo %taskShortName% 
    echo %action% 
    echo download things 
) 
REM source code end 

the output is: 
C:\Users\Charles>dbg_arg.bat download 20160901 init 
20160901 
init 
download things 
C:\Users\Charles>dbg_arg.bat download 20160901 init 
20160901 
init 
download things 
C:\Users\Charles>dbg_arg.bat download 20160901 resume 
20160901 
init <----- ERROR 
download things 
C:\Users\Charles>dbg_arg.bat download 20160901 resume 
20160901 
resume 
download things 
C:\Users\Charles> 

Irgendwelche Vorschläge, um das zu lösen?

+0

Sie müssen [verzögerte Expansion] (http://ss64.com/nt/delayedexpansion.html), da Sie schreiben * und * Lesen die gleichen Variablen in einem parenthesised Block Code ... – aschipfl

+0

Danke. Ich habe den Link gelesen. Es ist sehr hilfreich. – Chuck

Antwort

0

Wie bereits erwähnt, benötigen Sie eine verzögerte Erweiterung. Dies bedeutet, dass Sie die Zeile setlocal EnableDelayedExpansion am Anfang Ihrer Code- und Adressvariablen haben müssen, die Sie in Ihrem if-Block als !var! anstatt %var% geändert haben.

Versuchen Sie folgendes:

@echo off 
setlocal EnableDelayedExpansion 

set aim=%1 

if "%aim%"=="download" (
    set taskShortName=%2 
    set action=%3 
    echo !taskShortName! 
    echo !action! 
    echo download things 
) 
+0

Bekam es. Was ich wirklich brauche, ist, alle Argumente zu Beginn des Skripts zu erfassen, um eine "verzögerte Expansion" zu vermeiden. Vielen Dank! Jungs. – Chuck

+0

In der Tat ist es :-) Wenn Ihr Problem jetzt gelöst ist, markieren Sie bitte meine Antwort als eine Lösung. – MichaelS

+0

Ich dachte, ich könnte die aufeinanderfolgenden Argumente nach dem ersten Argument analysieren. Deshalb benutze ich diesen "Wenn-Block". Ich denke, es ist eine gute Angewohnheit, alle Argumente zu analysieren, bevor die echte Logik beginnt. – Chuck

Verwandte Themen