将fileName和echo设置为for循环批处理中的cmd.exe?

时间:2012-06-26 19:24:29

标签: batch-file for-loop echo

我想将许多属性的文件名中的每一个放入变量fileName中,并将它们回显到命令提示符窗口。但是,只有要循环的最后一个属性文件名才会打印出与属性文件一样多的次数。是否可以轻松解决此问题。我知道...... DO echo %% - nxG可以做同样的事情,但我想将文件名保存在%% ~nxG中以备将来使用。

FOR %%G IN (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
set fileName=%%~nxG
echo %fileName%
 )

1 个答案:

答案 0 :(得分:2)

您需要使用延迟扩展:

setlocal enabledelayedexpansion
FOR %%G IN (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
set fileName=%%~nxG
echo !fileName! 
 )

解析命令时,cmd中的环境变量会被扩展 - 在这种情况下,这包括括号中的整个块。所以%fileName%被一个空字符串替换,因为它在循环运行之前没有值。延迟扩展使用!而不是%并更改变量评估,以便在命令运行之前对其进行评估。

help set详细了解了必要的原因和时间。通常,每当您修改时,在循环中使用变量都必须使用延迟扩展,但它也带来了一些其他好处。