当前位置: 首页 > 知识库问答 >
问题:

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

柏高丽
2023-03-14

为什么这不会增加?我正在批处理文件中使用这个。它做任何事情都是正确的,只是没有增加。我做错了什么?

@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

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

共有3个答案

梁丘高朗
2023-03-14

在这个解决方案中,我同时使用了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
)
归浩博
2023-03-14

Dennis van Gils的答案已经向您展示了缺少什么——延迟变量展开。

由于您使用的语法是set/A variable=variable 1,这与set/A variable=%variable%1非常相似,因此延迟了扩展,比如set/A variable=!变量1有帮助。

但是,您可以使用另一种语法来避免延迟扩展的需要:set/A variable=1:

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

当然,如果延迟扩展被禁用,echo将不再在循环中工作,因此我将其移出循环,使用标准(立即)扩展来显示最终结果。

上官高逸
2023-03-14

试试这个:

@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

在循环(或if)中,您应该使用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

 类似资料:
  • 我正在学习使用stl向量,这是奇怪的,这个程序不能工作。这有什么问题?如果我想用Vector实现同样的功能,应该怎么做呢?

  • chrome浏览器 onclick链接 O:https://www.w3schools.com窗口打开 X:about:空白窗口打开

  • 代码 产出(如预期) 1.post increment运算符()在表中具有最高的优先级。因此它肯定会在赋值运算符()之前执行。根据post增量规则,变量的值只有在执行该语句之后才会增加。 参见有rvalue 3,而不是变量本身,对吗?但是如果它带来了一个具有lvalue的变量,那么5将插入其中,在语句结束后,它的值将是6。这有什么问题,为什么做不到?

  • 问题内容: 这些变量分配按预期工作: 但是,这些分配的行为不同: 为什么与示例不同,为什么相同?我如何在类示例中做类似的事情?也就是说,复制对象,然后更改它的一部分(那不会影响我借用属性的对象)吗? 问题答案: 我没有看到有人通过复制对象而不是仅仅为同一对象分配新的引用来提供有关如何使这两种情况相同的详细信息。 这将为您提供:

  • 问题内容: 我试图弄清楚为什么我无法覆盖通过隔离范围()传递给angularJS指令的值。我尝试使用以下方法覆盖的值: 但是,由于某些原因,它不起作用。 如果我将其更改为: 有用。另外,在作品上分配价值。 为什么第一种方法不起作用? 我已经创建了这个示例插件。 问题答案: 如您在此处使用的那样,需要通过插值指令从属性获取值。似乎指令首先被加载,然后值被求值。因此,在当前摘要周期中不会发生更改。如果