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

标签 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%"
    )
)

最佳答案

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

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

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

关于windows - 如何在循环中获取局部变量的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752405/

相关文章:

windows - 如何计算文本文件中的行数并将值存储到使用批处理脚本的变量中?

c++ - 在 Mac 和 Windows 上编写 C++ 代码应该使用什么?

java - JDBC 批量更新和处理异常?

batch-file - 批处理命令检查当前使用的系统语言,(不是默认语言)

Windows 上的 Python。为什么读取文本比二进制文件慢 8 倍?

windows - Windows 服务器重启后运行批处理脚本

arrays - 如何在批处理中返回数组的元素?

linux - "Couldn' t 在 Windows 上的 Ubuntu bash 上找到引用控制台的文件描述符

c++ - 是否可以从 file.lib 中提取目标文件?

windows - 如何在批处理文件脚本中循环打印程序的返回值?