gpt4 book ai didi

batch-file - 如何在批处理脚本中增加循环变量?

转载 作者:行者123 更新时间:2023-12-03 21:42:01 28 4
gpt4 key购买 nike

::Compare with available valid arguments
FOR /L %%i IN (1,1,!avArgc!) DO (
FOR /L %%j IN (1,1,!argc!) DO (
IF !avArgv[%%i]!==!argv[%%j]! (
echo Match: !avArgv[%%i]!

::Check the next option
SET /A nextArg=%%j
SET /A nextArg+=1
FOR /L %%n IN (!nextArg!,1,!nextArg!) DO (
IF !nextArg! LEQ !argc! (
echo next arg: !argv[%%n]!
call :CheckSubOption
)
)
)
)
)

在我上面的代码示例中 - 如何使用 for 循环变量,如 %%j并像这样在 for 循环中自增 %%j++ ?我目前的解决方案(它很乱,我不喜欢它)是创建一个新变量并将其设置为值 %%j然后增加该变量并开始使用该变量,如下所示:
::Check the next option
SET /A nextArg=%%j
SET /A nextArg+=1

最佳答案

观察您的代码和您的意图,您似乎希望在循环结构期间跳过数字。你想要改变它的方式会破坏稳定。在大多数脚本语言(例如 matlab、bash 和批处理)中,for 循环中使用的变量用作循环内的引用框架。 当您告诉代码运行特定的 for 循环时,无论其参数是否更改,它都会运行该计算。 一个现实世界的例子是教授使用过时的数字来解决问题,直到第二天他才会收到新的数字。教授不能相应地改变他的答案,因为他还没有新的数据。

这并不意味着这个问题无法解决。事实上,有多种方法可以解决这个问题。第一个稍微复杂一点,涉及嵌套的 For 结构。

@echo off
set /p maxLength=[Hi times?]
set skip=0

FOR /L %%i IN (1,1,%maxLength%) DO (call :subroutine %%i)

echo alright im done.
pause
GOTO :eof

rem the below code uses a for loop structure that only loops 1 time based on the passed argument from the overall for loop as so to make changes to how its run.

:subroutine
set /a next=%1+%skip%
FOR /L %%r IN (%next%,1,%next%+1) DO (call :routine %%r)
GOTO :eof

:routine
if %1==3 (set /a skip=1)
echo %skip%
echo %next%
echo %1
pause
GOTO :eof

运行程序时,变量 next如果 maxlength 将跳过值 3变量大于 3。
  • 之所以如此是因为嵌套的 for 循环只运行一次
    整个 for 循环的每次迭代

  • .由于 call,这让程序有时间重置它使用的数据。命令用作更新变量的一种方式。然而,这是非常低效的,并且可以用更少的代码行来完成。

    第二个示例使用 GOTO 和 if 语句。
    @echo off
    set jump=1
    :heyman
    set /A "x+=%jump%"
    if %x%==4 (set /A "jump=2")
    echo %x%
    if %x% LSS 10 goto heyman
    echo done!

    这段代码基本上会回显每次递增的 x 值,直到它达到 10 的值。但是,当它达到 4 时,增量会增加 1,因此每次运行循环时都会将 x 值增加 2。从你想要的,您希望能够更改 %%j 的值的方式增量,不能作为 %%j 完成是 for 循环在其计算中的位置的语句。除了处理方式不同之外,使用 for 循环和 goto 语句可以完成的任务没有区别。

    虽然不幸的是我还没有您的代码的正确形式,但我知道我提供的代码示例可用于实现您的特定愿望。

    关于batch-file - 如何在批处理脚本中增加循环变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039714/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com