我認爲問題在於您試圖在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
你有一個'goto:found',但是我沒有看到':found'標籤。 – shellter 2014-11-03 14:19:21