在Windows批处理脚本的for循环中获取子字符串

时间:2018-10-09 19:58:46

标签: windows batch-file

我不确定在这里做错了什么,但是我试图解析文件夹中的一些XML文件并获取每个文件名的子字符串。这是我在.bat文件中得到的:

for %%f in (*.xml) do (
    echo %%f
    echo %%f:~3,-4%%
)

第一个回显会很好地打印出文件名。但是第二个回声是我遇到的麻烦。我得到类似NewABCDEFG.xml的输出:

NewABCDEFG.xml
NewABCDEFG.xml:~3,-4%

我什么时候应该得到:

NewABCDEFG.xml
ABCDEFG

我不知道怎么了。如果我自己在命令行中运行substring命令,它可以正常工作。有什么建议么?

2 个答案:

答案 0 :(得分:0)

使用以下脚本修复了该问题:

setlocal EnableDelayedExpansion
for %%f in (*.xml) do (
set filename=%%f
echo !filename:~7,-4!
)

按照帮助指南,设定行是我真正需要的,以便在运行时扩展环境变量。

答案 1 :(得分:0)

首先将test { jacoco { exclude("*equals", "*hashCode") } } 更改为%%f,这将使其更易于阅读。

%%I

在这种情况下,无需延迟扩展。但是,我希望避免使用多命令行块:

for %%I in (*.xml) do echo %%I & echo %%~nI

还避免了替换变量和修饰符之间的混淆,例如,您可以使用for %%I in (*.xml) do call :DoIt %%I exit /b :DoIt echo %1 echo %~n1 exit /b 0 .. %%a%%z .. %%A