为什么这个增量不能批量工作?

问题描述 投票:0回答:4

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

@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

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

windows batch-file cmd
4个回答
4
投票

试试这个:

@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

3
投票

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
将不再在循环内工作,因此我使用标准(立即)扩展将其移到循环之外以仅显示最终结果。


0
投票

上述丹尼斯解决方案的稍微修改版本。注意 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!

0
投票

我在这个解决方案中同时使用了 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
)
© www.soinside.com 2019 - 2024. All rights reserved.