批量计数器不增加
问题描述:
代码不言自明。我已经在注释行中尝试了相同结果的命令。最后一行是增量分配和证据enabledelayedexpansion工作的测试。该故障必须位于for循环内。批量计数器不增加
@echo off
setlocal EnableDelayedExpansion
set count_k=5
for /l %%a in (1,1,5) do (
rem set a/ count_k+=1
rem set a/ "count_k+=1"
set a/ count_k=count_k+1
echo This is count_k per %count_k%
echo This is count_k exc !count_k!
)
echo After loop this is count_k %count_k%
set _var=first
set _var=second & echo %_var% !_var!
set count = 0
(
set /a count+=1
echo %count% fails
echo !count! works
)
这是上面的批处理文件的输出:
This is count_k per 5
This is count_k exc 5
This is count_k per 5
This is count_k exc 5
This is count_k per 5
This is count_k exc 5
This is count_k per 5
This is count_k exc 5
This is count_k per 5
This is count_k exc 5
After loop this is count_k 5
first second
fails
1 works
答
我从来没有在“set”命令之前看过“a /”参数。你确定它不打算成为“/ a”,这可能会影响你的结果和你的代码吗?
我讨厌交出鱼来代替教鱼,但是这与你想要做的相似吗?
@ECHO OFF
SET COUNT=0
ECHO Before the loop count is: %COUNT%
FOR /L %%A IN (1,1,5) DO (
@ECHO Loop %%A
SET /A COUNT=%COUNT%+%%A
)
ECHO Outside the loop count is: %COUNT%
输出看起来是这样的:
Before the loop count is: 0
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Outside the loop count is: 5
通过品评出@ECHO OFF,它看起来像这样:
C:\Users\loginID>REM @ECHO OFF
C:\Users\loginID>SET COUNT=0
C:\Users\loginID>ECHO Before the loop count is: 0
Before the loop count is: 0
C:\Users\loginID>FOR /L %A IN (1 1 5) DO (
SET /A COUNT=0+%A
)
C:\Users\loginID>(
SET /A COUNT=0+1
)
Loop 1
C:\Users\loginID>(
SET /A COUNT=0+2
)
Loop 2
C:\Users\loginID>(
SET /A COUNT=0+3
)
Loop 3
C:\Users\loginID>(
SET /A COUNT=0+4
)
Loop 4
C:\Users\loginID>(
SET /A COUNT=0+5
)
Loop 5
C:\Users\loginID>ECHO Outside the loop count is: 5
Outside the loop count is: 5
注意内循环,引用%无论我们在循环内重置了多少次,COUNT%始终为0(从进入循环之前)。如果我让内环路的变化来
SET/A + COUNT = %%一个
我的最终结果呼应%COUNT%会导致15在此之外,我不知道你想达到什么样的。
+0
谢谢丹尼尔,一个简单的诵读困难的错误造成了我所有的麻烦...... –
答
这适用于Windows 7控制台窗口:
@echo off
setlocal EnableDelayedExpansion
set count_k=5
for /l %%a in (1 1 5) do (
set /a count_k=!count_k!+1
echo !count_k!
)
注意呼应%count_k%将输出5,因为%...%类似于C预处理程序,它在实际运行批处理文件之前执行字符串替换。
Cmd.exe尽管出现,但与DOS无关。如果您正在编写新脚本,请不要打扰批处理。使用PowerShell。 –
希望这会有所帮助:https://stackoverflow.com/questions/21697199/how-to-increment-variable-under-dos –
不应该是'set/a'而不是'set a /'? – kichik