我想将许多属性的文件名中的每一个都放入变量 fileName 并将它们回显到命令提示符窗口。但是只有最后一个要循环的属性文件名被打印出与属性文件一样多的次数。这个问题有没有简单的解决方法。我知道 ...DO echo %%-nxG 可以做同样的事情,但我想将文件名保存在 %%~nxG 中以备将来使用。
FOR %%G IN (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
set fileName=%%~nxG
echo %fileName%
)
我想将许多属性的文件名中的每一个都放入变量 fileName 并将它们回显到命令提示符窗口。但是只有最后一个要循环的属性文件名被打印出与属性文件一样多的次数。这个问题有没有简单的解决方法。我知道 ...DO echo %%-nxG 可以做同样的事情,但我想将文件名保存在 %%~nxG 中以备将来使用。
FOR %%G IN (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
set fileName=%%~nxG
echo %fileName%
)
您需要使用延迟扩展:
setlocal enabledelayedexpansion
FOR %%G IN (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
set fileName=%%~nxG
echo !fileName!
)
解析cmd
命令时会扩展环境变量- 在这种情况下,这包括括号中的整个块。所以被一个空字符串替换,因为它在循环运行之前没有值。延迟扩展使用而不是更改变量评估,以便在命令运行之前对其进行评估。%fileName%
!
%
help set
有更多关于为什么以及何时需要的详细信息。通常,每当您在循环中修改和使用变量时,您都必须使用延迟扩展,但它也带来了一些其他好处。