我认为问题在于您试图在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