2014-11-03 46 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