【问题标题】:Batch counter not increasing [closed]批处理计数器不增加[关闭]
【发布时间】:2017-07-27 21:55:42
【问题描述】:

代码是不言自明的。我已经尝试了注释行中的命令,结果相同。最后几行是增量分配和证据启用的测试,elayedexpansion 作品。错误必须在 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

【问题讨论】:

  • Cmd.exe,尽管看起来,与 DOS 无关。如果您正在编写新脚本,请不要使用批处理。使用 PowerShell。
  • 希望对您有所帮助:stackoverflow.com/questions/21697199/…
  • 不应该是set /a而不是set a/吗?
  • 你正在设置一个名为a/ count_k的变量;重新检查你的语法...
  • 忽略比尔_斯图尔特;他的噱头是对批处理文件标签提出问题并告诉 OP 使用 PowerShell。

标签: windows batch-file cmd


【解决方案1】:

我以前从未见过“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+=%%A

我回显 %COUNT% 的最终结果将导致 15。除此之外,我不确定您要达到什么目标。

【讨论】:

  • 谢谢丹尼尔,一个简单的阅读障碍错误导致了我所有的麻烦......
【解决方案2】:

这适用于 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! 
)

请注意,echo %count_k% 将输出 5,因为 %...% 类似于在实际运行批处理文件之前执行字符串替换的 C 预处理器。

【讨论】:

  • 只是好奇:为什么你的每一行都以@开头,尽管@echo off
  • @Stephan - 只是习惯,正如你提到的,它不是必需的。我经常剪切和粘贴批处理文件,其中一些没有回显。现在已经修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多