2017-07-27 79 views
0

代码不言自明。我已经在注释行中尝试了相同结果的命令。最后一行是增量分配和证据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 
+1

Cmd.exe尽管出现,但与DOS无关。如果您正在编写新脚本,请不要打扰批处理。使用PowerShell。 –

+0

希望这会有所帮助:https://stackoverflow.com/questions/21697199/how-to-increment-variable-under-dos –

+3

不应该是'set/a'而不是'set a /'? – kichik

回答

0

我从来没有在“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

谢谢丹尼尔,一个简单的诵读困难的错误造成了我所有的麻烦...... –

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预处理程序,它在实际运行批处理文件之前执行字符串替换。

+1

只是好奇:为什么尽管有'@echo off',你会用'@'开始每一行? – Stephan

+0

@Stephan - 只是习惯,因为你提到它并不需要。我经常剪切并粘贴批处理文件,其中一些文件没有关闭回显。现在已经修复了。 – rcgldr