batch-fil unnlater å sette variabel i IF klausul

stemmer
10

Følgende kode er ikke oppdaterer Kjør til lik N selv om kampen oppstår. Dette betyr at jeg ikke slippe inn i CALL-koden. Har jeg gått glipp av noe her?

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
    )   
)
Publisert på 30/12/2009 klokken 00:25
kilden bruker
På andre språk...                            


1 svar

stemmer
18

Du må bruke den forsinkede utvidelse muligheten til cmd.exe.

På toppen av skriptet, sette:

setlocal enableextensions enabledelayedexpansion

og deretter sette:

endlocal

på bunnen.

Da må du bruke !Run!i stedet for %Run%.

Grunnen koden din ikke fungerer, er at hele FOR regnskapet (inkludert kommandoene i det) evalueres når den er oppstått. Det er det punktet hvor %Run%variablene er utvidet.

Ved å bruke utsatt ekspansjon, trenger du ikke utvide dem før de er faktisk nødvendig (etter at du har satt dem i blokk).

Du kan se forskjellen i dette skriptet:

@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

som sender ut:

a
b
c
yes for delayed
d

Du vil merke at sjekken med %xx%fungerer ikke fordi det ble vurdert når foruttalelsen startet (og xx0). Den forsinkede utvidelsen !xx! ikke fungere siden som evalueres hver gang sløyfen.

Svarte 30/12/2009 kl. 00:39
kilden bruker

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