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

eri*_*223 4 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%"
    )
)
Run Code Online (Sandbox Code Playgroud)

And*_*y M 7

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

要防止变量过早被评估,您需要在本地启用变量的延迟扩展并稍微更改语法.这是如何做:

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

  • 您可以为脚本的任何部分启用/禁用延迟扩展.通常需要限制其操作范围,以避免在您不需要的情况下意外消耗"!". (2认同)