批处理文件中的“for”循环 - 多行

31

为什么下面的行可以在批处理文件中正常运行?

 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”的内容?

1个回答

40

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接