2009-12-30 10 views
10

El siguiente código no se actualiza para igualar Run N a pesar de que se produce el encuentro. esto significa que no estoy cayendo en el código CALL. ¿Me estoy perdiendo de algo?archivo por lotes no puede establecer la variable en la cláusula SI

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" 
    ) 
) 

Respuesta

18

Es necesario utilizar la opción de expansión retardada de cmd.exe.

En la parte superior de su script, poner:

setlocal enableextensions enabledelayedexpansion 

y luego poner:

endlocal 

en la parte inferior.

Luego necesita usar !Run! en lugar de %Run%.

La razón por la que su código no está funcionando es que la instrucción TO entera FOR (incluidos los comandos dentro de ella) se evalúa cuando se encuentra. Ese es el punto donde se expanden las variables %Run%.

Mediante el uso de la expansión diferida, no ampliarlos hasta que sean realmente necesarios (después de que los haya establecido dentro del bloque).

Se puede ver la diferencia en este script:

@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 

que da salida:

a 
b 
c 
yes for delayed 
d 

Se dará cuenta de que el cheque con %xx% no funciona debido a que cuando se evaluó la declaración for iniciado (y xx fue 0). El-expansión retardada !xx!hace trabajo desde que se evalúa cada vez a través del bucle.

+0

Gracias paxdiablo, totalmente ordenados mi problema – sapatos

Cuestiones relacionadas