如何在循环中获取局部变量的子串?

时间:2011-04-22 04:55:13

标签: windows batch-file

我想编写一个脚本来获取目录中的所有文件名,并使用 all 排除文件名。

我想出了以下脚本,但它不起作用,有人可以帮助我吗?

for /R "%SOME_DIRECTORY%" %%f in (*.testcase) do (
    set CURRENT_TESTCASE=%%~nf
    if not %CURRENT_TESTCASE:~-3%==all  (
        echo %%~nf >> "%FILELIST%"
    )
)

1 个答案:

答案 0 :(得分:7)

在执行循环体之前评估CURRENT_TESTCASE变量。 (这就是命令处理器处理包含parantheses的复合命令的方式。)

为防止过早评估变量,您需要在本地启用delayed expansion变量并稍微更改语法。方法如下:

for /R "%SOME_DIRECTORY%" %%f in (*.testcase) do (
    set CURRENT_TESTCASE=%%~nf
    setlocal EnableDelayedExpansion
    if not !CURRENT_TESTCASE:~-3!==all  (
        echo %%~nf >> "%FILELIST%"
    )
    endlocal
)