Windows蝙蝠:循环填充范围
编辑: 我需要一个bat脚本(或一行代码)来循环一个作为填充值给出的范围。它将: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
(
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)分配“开始”和“结束”时,它们将被填充。我无法控制!但这真的很有帮助,谢谢!