在每个循环中,我尝试在除第一个循环之外的每个迭代上执行任务。这是我的尝试
@echo off
set sources=file1.txt file2.txt
set output=output.txt
set comment_prefix=--
break>%output%
setlocal EnableDelayedExpansion
set first=1
for %%a in (%sources%) do (
if %first%==0 (
echo.>> %output%
echo.>> %output%
echo.>> %output%
)
set first=0
echo %first%
echo %comment_prefix%>>%output% %%a
echo.>> %output%
type %%a>>%output%
)
问题是变量first
似乎经常设置为1
,即使它在第一次迭代后应该设置为0
(我认为)...... / p>
first
的值更改为零?干杯
修改
这是当前的输出
1
1
答案 0 :(得分:3)
您正在设置和扩展(读取)同一行或代码块中的变量,因此您需要delayed expansion。否则,%first%
将扩展到解析整个行/块时变量设置为的值(因此变量实际上是设置,但读取旧值) 。要使用延迟展开,请将%first%
替换为!first!
。
但是,由于您仅将变量用作布尔标志,因此您可以通过空变量而不是值0
来反映布尔值False,因此您可以使用if not defined first
代替{ {1}},延迟扩展不是必需的:
if !first!==0