为什么这不会增加?我在批处理文件中使用它。它会正确执行所有操作,但不会增加。我做错了什么?
@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
编辑:这不是重复的,这是一个完全不同的问题。
试试这个:
@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
Dennis van Gils 的答案已经向您展示了缺少的东西——延迟变量扩展。
您正在使用语法
set /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
将不再在循环内工作,因此我使用标准(立即)扩展将其移到循环之外以仅显示最终结果。
上述丹尼斯解决方案的稍微修改版本。注意 set /a 命令。当然,在这种情况下,您实际上并不需要 var“变量”,但我认为这是一个需要您使用它的作业。在更一般的情况下,您可能需要它。
@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!
我在这个解决方案中同时使用了 for 和 if 。
@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
)