为什么批量增加这个增量工作?

时间:2016-01-04 22:25:12

标签: windows batch-file cmd

为什么这不会增加?我在批处理文件中使用它。它可以正确地完成所有操作,但不会增加。我做错了什么?

@SET variable=1
@echo How many increments should be created?
@set /p increments=
@echo off

@FOR /l %%x in (1, 1, %increments%) do @(
@SET /A variable=variable+1
@echo %variable%
)

@ECHO Program Complete!
@pause

编辑:这不是重复,这是一个完全不同的问题。

4 个答案:

答案 0 :(得分:1)

prefix header已经向您展示了缺失的内容 - 延迟变量扩展。

由于您使用的语法set /A variable=variable+1set /A variable=%variable%+1非常相似,因此set /A variable=!variable!+1等延迟扩展会有所帮助。

但是,您可以使用其他语法来避免延迟扩展:set /A variable+=1

for /L %%x in (1, 1, %increments%) do (
    set /A "variable+=1"
)
echo %variable%

当然,如果禁用延迟扩展,echo在循环内不再起作用,所以我将它移出循环以显示最终结果,使用标准(立即)扩展。

答案 1 :(得分:0)

试试这个:

@echo off
setlocal EnableDelayedExpansion
SET "variable=1"
set /p "increments=How many increments should be created? "
echo off

FOR /l %%x in (1, 1, %increments%) do (
SET /A "variable=!variable!+1"
echo !variable!
)

ECHO Program Complete!
pause

在循环内(或如果),您应该使用setlocal EnableDelayedExpansion!代替%

我也改变了你的set /p,因为你可以给一个字符串回显set /p本身,而不是在它上面使用echo,并在你的集合周围放置双引号,这样它就不会像空格这样的值的错误。请注意,当您尝试输入字符串而不是数字时,它将不会循环,而不是崩溃

修改

一个更简单的版本,只包含循环变量本身(%% x)且没有延迟扩展:

@echo off
SET "variable=1"
set /p "increments=How many increments should be created? "
set /a "forincrements=increments+1"
FOR /l %%x in (%variable%, 1, %forincrements%) do (
  echo %%x
)
ECHO Program Complete!
pause

答案 2 :(得分:0)

在此解决方案中,我既使用它又使用它。

@echo off
setlocal enabledelayedexpansion
SET /A i = 1
for /f "tokens=*" %%f in (temp.txt) do (

    IF !i!==2 echo %%f
    SET /a i+=1
)

答案 3 :(得分:-1)

上面丹尼斯解决方案的略微修改版本。注意set / a命令。当然,在这种情况下,你并不真正需要var“variable”,但我想这是一个你需要使用它的赋值。在更一般的设置中,您可能需要它。

@echo off

setlocal enabledelayedexpansion
set variable=1
set /p increments=How many increments should be created? 

for /l %%x in (1, 1, %increments%) do (
    echo !variable!
    set /a variable += 1
)

echo Program Complete!