gpt4 book ai didi

Windows 7 循环批处理文件

转载 作者:可可西里 更新时间:2023-11-01 11:28:25 25 4
gpt4 key购买 nike

在这两种情况下,目录都包含三个名为 test1.txt、test2.txt、test3.txt 的文件

谁能解释一下为什么会这样:

echo off
set CP=
for %%f in (*.txt) do (
call :concat %%f
)
echo %CP%

:concat
set CP=%CP%;%1

输出:

C:\test>test

C:\test>echo off
;test1.txt;test2.txt;test3.txt

C:\test>

但这不是:

echo off
set CP=
for %%f in (*.txt) do (
set CP=set CP=%CP%;%%f
)
echo %CP%

输出:

C:\test>test

C:\test>echo off
;test3.txt

C:\test>

最佳答案

这与延迟扩展有关。

例如,这将像您的第一个示例一样工作:

echo off
SETLOCAL EnableDelayedExpansion
set CP=
for %%f in (*.txt) do (
set CP=!CP!;%%f
)
echo %CP%
ENDLOCAL

当启用延迟扩展时,用 ! 包围的变量在每次迭代 上计算,而不是仅在第一次解析循环时计算(这是用 ! 包围的变量的方式) % 被解析)。

您的第一个示例之所以有效,是因为处理是在 CALL 语句中完成的,该语句将控制权传递给批处理文件的另一段,从技术上讲,该段在循环之外,因此每次执行时都会对其进行单独解析。

关于Windows 7 循环批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com