2016-07-07 9 views
0

Ich bin neu in Windows-Batch-Scripting. Versuchen, Werte aus der Textdatei Ignore.txt Datei zu erhalten und sie als lokale Variablen zu speichern.Token-Werte von for-Schleife in Windows abrufen Batch

Befehl Datei:

@Echo off 
setlocal enabledelayedexpansion 

for /F "tokens=1,2,3" %%i in (Ignore.txt) do (
    echo. %%i 
    echo. %%j 
    echo. %%k 

    set value1=%%i 
    set value2=%%j 
    set value3=%%k 
) 

Echo. Value1: !value1! 
Echo. Value2: !value2! 
Echo. Value3: !value3! 

Endlocal 

Ignore.txt:

*.svc 
*.jpg 
*.png 

Aber das Ergebnis nur druckt eine Variable, die zu falsch:

Ausgang:

*.svc 
*.jpg 
*.png 

Value1: *.png 
Value2: 
Value3: 

Bitte helfen Sie mir, wenn ich hier etwas falsch mache. Auch irgendwelche Vorschläge zu anderen besseren Möglichkeiten, diese Informationen zu erhalten.

+1

Die 'for' Schleife an eine eine Zeile verarbeitet Zeit, und die Zeilen in Ihrer Datei haben nur einen Token (der von '%% i' konsumiert wird), also sind' %% j' und '%% k' NULL. – CristiFati

+0

@CristiFati, Wenn das der Fall ist, wie kommt es, echo druckt Werte richtig? – sunny24365

+4

_Ignore.txt_ hat 3 Zeilen: Die for-Schleife wird 3-mal und jedesmal nur echo ausgeführt. %% i' erzeugt die Ausgabe auf dem Bildschirm, die anderen 2 (da die Variablen NULL/leer sind) werden mit '@Echo off' unterdrückt. – CristiFati

Antwort

1

Die Hilfe für for ‚s token Option dieses Bit enthält:

tokens=x,y,m-n - specifies which tokens from each line are to 
       be passed to the for body for each iteration. 

Mit anderen Worten, es wird aufgeteilt nur eine einzige Zeile in mehrere Variablen. Dies wird durch den Lauf Ihres Skripts belegt: Es gibt jede Zeile aus, aber es werden leere Zeilen zwischen den leeren %% j und %% k ausgegeben.

Wenn Sie diese Datei in einzelne Variablen analysieren wollen, werden Sie sind auf manuell, welche Zeile Sie brauchen, um zu verfolgen, mit so etwas wie folgt aus:

@Echo off 
setlocal enabledelayedexpansion 

set _digit=1 
for /F %%i in (Ignore.txt) do (
    echo. %%i 

    set value!_digit!=%%i 
    set /a _digit=!_digit!+1 
) 

Echo. Value1: !value1! 
Echo. Value2: !value2! 
Echo. Value3: !value3! 

Endlocal