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

Posted

技术标签:

【中文标题】批处理文件“for”循环 - 多行【英文标题】:Batch file 'for' loops - multiple lines 【发布时间】:2013-10-07 21:43:32 【问题描述】:

为什么以下行会在批处理文件中起作用?

 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】:

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

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

【讨论】:

以上是关于批处理文件“for”循环 - 多行的主要内容,如果未能解决你的问题,请参考以下文章

批处理文件 FOR 循环改进

批处理文件只运行一次,FOR循环出错

如何逐步在批处理文件中运行for循环

如何在批处理文件中使用for循环列出文件夹中所有文件和目录的名称

批处理:如何在 FOR 循环中附加字符串

ftp echo批处理命令,想要用for循环传递多个文件