27

为什么以下行将在批处理文件中工作?

 for  %%a in ("C:\Test\*.txt") do set FileName=%%~a
 echo Filename is: %FileName%

但这些不会?:

 for  %%a in ("C:\Test\*.txt") do (
     set FileName=%%~a
     echo Filename is: %FileName%
 )

就像第二行没有保留“a”变量一样。为什么会这样?如何使用第二个示例中的“a”的内容?

4

1 回答 1

34

这是因为括号之间的所有内容都作为一行加载。所以%FileName%在设置之前(在运行时)被扩展(在加载时)。如果需要使用第二种格式,则需要开启延迟扩展。如果文件名包含!. 如果文件名中没有括号,这将起作用。

 setlocal enabledelayedexpansion
 for  %%a in ("C:\Test\*.txt") do (
     set FileName=%%~a
     echo Filename is: !FileName!
 )
 endlocal
于 2013-10-01T16:25:14.280 回答