Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows蝙蝠:循环填充范围_Windows_Loops_Batch File - Fatal编程技术网

Windows蝙蝠:循环填充范围

Windows蝙蝠:循环填充范围,windows,loops,batch-file,Windows,Loops,Batch File,编辑: 我需要一个bat脚本(或一行代码)来循环一个作为填充值给出的范围。它将: 取消粘贴“开始”和“结束”的值 在给定未添加值的范围内迭代 该值需要重新填充 例如:开始=0980,结束=1000,步骤=1 我需要在这个范围内循环,并给出一个填充的数字 我有这么多,但我一直得到: ( SET VAR=000985 SET VAR=~-4 ECHO ) ECHO is on. 到目前为止,我所拥有的: REM Get the start, end and step values SET star

编辑: 我需要一个bat脚本(或一行代码)来循环一个作为填充值给出的范围。它将:

  • 取消粘贴“开始”和“结束”的值
  • 在给定未添加值的范围内迭代
  • 该值需要重新填充
  • 例如:开始=0980,结束=1000,步骤=1 我需要在这个范围内循环,并给出一个填充的数字

    我有这么多,但我一直得到:

    (
    SET VAR=000985
    SET VAR=~-4
    ECHO
    )
    ECHO is on.
    
    到目前为止,我所拥有的:

    REM Get the start, end and step values
    SET start=0980
    SET end=0985
    SET step=1
    
    REM Remove Padding
    FOR /F "tokens=* delims=0" %%A IN ("%start%") DO (SET start=%%A)
    FOR /F "tokens=* delims=0" %%A IN ("%end%") DO (SET end=%%A)
    FOR /l %%x in (%start%, %step%, %end%) DO ( 
        SET VAR=000%%x
        SET VAR=%VAR:~-4%
        ECHO %VAR%
    )
    
    最终,VAR将被馈送到一个命令中

    mantra -V a -F /some/path/with.%x.ifd
    
    @echo关闭
    延迟扩展
    REM获取开始、结束和步骤值
    SET/a start=980
    设置/a端=985
    设置/a步骤=1
    移除填充物
    对于/l%%x in(%start%,%step%,%end%)执行(
    设置VAR=000%%x
    设置变量=!变量:~-4!
    回音!变音!
    )
    
    Delayedexpansion是关键-在块语句
    (一系列括号内的语句)
    ,整个块被解析,然后执行。在解析块时,块内的任何
    %var%
    都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块)

    克服此问题的两种常见方法是:1)使用
    setlocal enabledelayedexpansion
    !瓦尔
    代替
    %var%
    以访问
    var
    的更改值,或2)调用子例程以使用更改的值执行进一步处理

    注意使用
    set/a
    ,因为要分配的值是纯数字。不幸的是,前导零意味着该值是八进制的,所以请处理这些值


    很多关于延迟扩张的文章…看看周围。

    你的问题让人困惑。我不明白您是否需要一个能够精确执行所述步骤(取消填充值、迭代、重新填充值)或生成填充数字列表(无论使用何种方法)的解决方案;另外,您没有显示所需的输出,因此我假设这是一个列表:
    098009810982098309840985
    。最后,您没有指出填充数字中的位数,因此我假设它是4,并且输入数据具有该位数或更多

    这是一个简单的解决方案:

    @echo off
    setlocal EnableDelayedExpansion
    
    REM Get the start, end and step values as padded numbers
    SET start=0980
    SET end=0985
    SET step=1
    
    rem Convert the start and end values into an equivalent "1+N-digits" number (4 in this case)
    rem for example: start=10980 and end=10985
    set /A start=1%start:~-4%, end=1%end:~-4%
    
    rem Iterate through the new range: from 10980 step 1 to 10985
    for /L %%i in (%start%, %step%, %end%) do (
       rem Output the digits after the first one; for example: 0980, 0981, etc
       echo !start:~1!
       rem Pass to next number
       set /A start+=step
    )
    

    谢谢很遗憾,稍后(通过%1,%2)分配“开始”和“结束”时,它们将被填充。我无法控制!但这真的很有帮助,谢谢!