Batch-Datei nicht in IF-Klausel Variable setzen

stimmen
10

Der folgende Code wird nicht aktualisiert Run N gleich, obwohl das Spiel stattfindet. dies bedeutet, dass ich nicht in der CALL-Code fallen. Bin ich etwas fehlt hier?

SET Run=Y

REM Check current files date/time information and establish if the file has been present too long in the directory
REM Skip first 4 lines as header information not required

FOR /f tokens=1-5 skip=4 delims=  %%G IN ('dir /OD %SRCH_CRITERIA% ') DO (

    ECHO Params to processFile:   %%G %%H %%I %%K
    IF %%K.==.  ( 
        ECHO K:nothing
        SET Run=N
        ECHO %Run%
    ) 

    IF %%K==free (
        ECHO K:FREE
        SET Run=N
        ECHO %Run%
    ) 

    ECHO %Run% RUN
    IF %Run%==Y (
        CALL :processFile %%G %%H %%I %%K
    )   
)
Veröffentlicht am 30/12/2009 um 01:25
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
18

Sie müssen die verzögerte Erweiterungsoption von cmd.exe verwenden.

Am Anfang des Skripts setzen:

setlocal enableextensions enabledelayedexpansion

und dann setzen:

endlocal

unten.

Dann müssen Sie verwenden !Run!statt %Run%.

Der Grund , Ihr Code nicht funktioniert , dass die gesamte FOR - Anweisung (einschließlich der Befehle innerhalb it) ausgewertet wird , wenn es aufgetreten ist. Das ist der Punkt , wo die %Run%Variablen erweitert werden.

Durch die verzögerte Erweiterung verwenden, dürfen Sie erweitern Sie sie nicht, bis sie tatsächlich gebraucht werden (nachdem Sie sie innerhalb des Blocks festgelegt haben).

Sie können den Unterschied in diesem Skript finden Sie unter:

@echo off
setlocal enableextensions enabledelayedexpansion

set xx=0
for %%i in (a b c d) do (
    echo %%i
    set /a "xx = xx + 1"
    if %xx%==3 echo yes for normal
    if !xx!==3 echo yes for delayed
)

endlocal

die Ausgänge:

a
b
c
yes for delayed
d

Sie werden feststellen , dass die Prüfung mit %xx%nicht da funktioniert die ausgewertet wurde , als die forAnweisung gestartet (und xxwar 0) gewonnen . Die verzögerten Expansion !xx! nicht arbeiten , da das jedes Mal durch die Schleife ausgewertet wird.

Beantwortet am 30/12/2009 um 01:39
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more