0

!errorlevel! を使用しようとしています。ループ内の条件として。呼び出しでエラー レベルを渡し、再び findstr を使用してエラー レベルを設定しようとしましたが、条件が変化していません。

   setlocal EnableDelayedExpansion
   for /F %%i in  (%Newzips.lst%) do    (
    echo unzipping %%i >> test.log  
    wzunzip -o %%i
    call :startloop 
    )
   exit /B

   :startloop

   dir /b *.dat > %Stagedat.lst%
     for /F %%l in (%Stagedat.lst%) do (        
        dir /b E:\NOMADD_FILES\AV\*.dat > %AVdat.lst%
        findstr /i /c %%l %AVdat.lst%
        echo top error level - !errorlevel! 
        call :checkdup %%l !errorlevel!          
    )   
    exit /B

   :checkdup    
    if !errorlevel! == 0 (
        dir /b E:\NOMADD_FILES\AV\*.dat > %AVdat.lst%
        findstr /i %1 %AVdat.lst% >> test.log
        echo  found match so sleep e >> test.log
        echo error level - !errorlevel! >> test.log
        sleep 3
        echo duplicate in  AVdat.lst >> test.log
        call :checkdup %1 !errorlevel!
)
    if !errorlevel! == 1 (
        echo copying file %2 >> test.log
        move /Y %1 E:\NOMADD_FILES\AV
       sleep 5
       dir /b E:\NOMADD_FILES\AV\*.dat > %AVdat.lst%
       echo moveing AVdat.lst >> test.log
       echo error level - !errorlevel! >> test.log
       type %AVdat.lst% >> test.log
)
    exit /B



    :end 

つまり、:checkdup に到達して findstr を再度実行すると、!errorlevel! が実行されます。は 1 に更新されていますが、まだ上部の if ステートメント内にとどまっています。

これはログのサンプルです。

    top error level - 0 
    bcs3_ammo_inv_updates.dat
    found match so sleep e 
    error level - 0 
    duplicate in  AVdat.lst 
    bcs3_ammo_inv_updates.dat
    found match so sleep e 
    error level - 0 
    duplicate in  AVdat.lst 
    bcs3_ammo_inv_updates.dat
    found match so sleep e 
    error level - 0 
    duplicate in  AVdat.lst 
    found match so sleep e 
    error level - 1 
    duplicate in  AVdat.lst 
    found match so sleep e 
    error level - 1 
    duplicate in  AVdat.lst 
    found match so sleep e 
    error level - 1 

したがって、エラー レベルは 1 に設定されていますが、if !errorlevel! でスタックしています。== 0 状態。他のチェックに進み、for ループを続行する必要があります。私はこれに数日間立ち往生しており、さまざまな組み合わせを試して機能させています。

ありがとう

4

1 に答える 1

2
   :checkdup    

    if !errorlevel! == 0 (
        ...
        echo error level - !errorlevel! >> test.log
        sleep 3

        rem AND AFTER SLEEP, which is the value of errorlevel?

        call :checkdup %1 !errorlevel!
    )
于 2013-10-28T15:20:11.680 に答える