Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在批处理循环中是否将文件名和echo设置为cmd.exe?_Batch File_For Loop_Echo - Fatal编程技术网

Batch file 在批处理循环中是否将文件名和echo设置为cmd.exe?

Batch file 在批处理循环中是否将文件名和echo设置为cmd.exe?,batch-file,for-loop,echo,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% ) 您需要使用延迟扩展:

我想把许多属性的文件名都放到变量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%
将被一个空字符串替换,因为它在循环运行之前没有值。延迟扩展使用
而不是
%
,并更改变量求值,以便在命令运行之前对其求值


帮助集
提供了有关为什么以及何时需要帮助的更多详细信息。一般来说,无论何时在循环中修改和使用变量,都必须使用延迟扩展,但它还有其他一些好处。

谢谢joey,为什么!用符号代替通常的%??@jerryh91
代替了
%
,因为。