2014-11-03 75 views
0

任何人都可以在這裏找到,爲什麼我得到錯誤「在這個時候意外嗎?」?Windows批處理在這個時候出乎意料的是

echo 
for /F "tokens=*" %%A in (myfile.txt) do ( 
    S: 
    cd \WRO_Regression_results\%%A 

    FOR /F %%i IN ('dir /b /ad-h /o-d') DO (
     SET b=%%i 
     GOTO :found 
    ) 
    echo No subfolder found 
    goto :eof 

    echo Most recent subfolder: %b% 
    cd %b% 
    dir 

    find /c "O K" tooling.report 
    if %errorlevel% equ 1 goto notfound 
    echo found 
    goto done 

    :notfound 
    echo notfound 
    goto done 

    :done 
) 

pause 
+0

你有一個'goto:found',但是我沒有看到':found'標籤。 – shellter 2014-11-03 14:19:21

回答

2

我認爲問題在於您試圖在FOR循環中定義標籤。這可能是不允許的(儘管我知道CMD語法沒有明確的參考)。這是一個稍微修改過的腳本版本(定義了:found)。

echo 
for /F "tokens=*" %%A in (myfile.txt) do ( 
    S: 
    cd \WRO_Regression_results\%%A 

    FOR /F %%i IN ('dir /b /ad-h /o-d') DO (
     SET b=%%i 
     GOTO :found 
    ) 
    echo No subfolder found 
    goto :eof 

    echo Most recent subfolder: %b% 
    cd %b% 
    dir 
) 

:found 
find /c "O K" tooling.report 
if %errorlevel% equ 1 goto notfound 
echo found 
goto done 

:notfound 
echo notfound 
goto done 

:done 


pause 

如果你想找到並找不到循環中的每個項目,你可以做這樣的事情。訪問FOR循環內變量的變量需要延遲擴展。 CALL可以用來處理像子程序這樣的標籤。 AFAIK,在CMD中沒有辦法擺脫FOR循環,所以FOUND變量是一個標記值,它可以防止在循環的第一次迭代之後設置b。如果您描述腳本的預期行爲,我會更好地瞭解如何實現預期的目標。

SETLOCAL ENABLEDELAYEDEXPANSION 

echo for /F "tokens=*" %%A in (myfile.txt) do ( 
    S: 
    cd \WRO_Regression_results\%%A 

    SET FOUND=0 
    FOR /F %%i IN ('dir /b /ad-h /o-d') DO (
     IF NOT !FOUND!==1 (
      SET b=%%i 
      SET FOUND=1 
     ) 
    ) 
    IF !FOUND!==1 (CALL :found) ELSE (CALL :notfound) 

    echo Most recent subfolder: %b% 
    cd %b% 
    dir) 

:found 
find /c "O K" tooling.report 
if %errorlevel% equ 1 goto notfound 
echo found 
EXIT /B 

:notfound 
echo notfound 
EXIT /B 


:done 


pause 
+0

如果你希望在循環中有':found'和':notfound'目標,你可能必須用'IF()THEN ELSE()'語句來完成。你沒有確切地說出行爲應該是什麼,所以我猜測了一下。這可能是錯誤的。 – mojo 2014-11-04 13:32:39

相關問題