2009-12-30 11 views
10

değişkeni ayarlamak için başarısız olur. Bu, CALL koduna girmeyeceğim anlamına gelir. Burada bir şey mi eksik?toplu iş dosyası aşağıdaki kod Çalıştır maçı oluşuyor olsa bile N eşit güncellenmiyorsa IF maddede

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

cevap

18

cmd.exe dosyasının gecikmeli genişletme seçeneğini kullanmanız gerekir. Senaryonuzun üst kısmında

, koyun:

setlocal enableextensions enabledelayedexpansion 

ve sonra koyun:

endlocal 

altta.

Sonra !Run! yerine %Run% kullanmak gerekir.

Kodunuzun çalışmadığı nedeni, tüm FOR deyiminin (içindeki komutlar dahil) karşılaşıldığında değerlendirildiğidir. Yani %Run% değişkenler genişletilir noktası. aslında ihtiyaç duyana (bloktan içinde onları kurdum sonra)

ertelenmiş genişlemesini kullanarak, onları genişlemez.

Bu komut farkı görebilirsiniz

:

@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 

verir:

a 
b 
c 
yes for delayed 
d 

Bunu değerlendirildi çünkü %xx% ile onay çalışmıyor fark edersiniz zaman for beyanı başladı (ve xx, 0 idi). Bu döngü içinde, her zaman değerlendirilir çünkü gecikmeli genişleme !xx! iş yapar.

+0

sayesinde tamamen benim sorunu sıralanmış paxdiablo – sapatos

İlgili konular