使用计数器循环执行

时间:2015-04-20 16:57:26

标签: batch-file

我有一个变量列表,它是100(记事本文件,MediaList.txt),但是我想在25的范围内执行,所以最简单的方法是用下面的方法做同样的事情提到的循环。基本上我想用计数器执行下面提到的循环。

for /f %%I in (E:\MediaList.txt) do nsrjb -w -N %%I

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a blocksize=23
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r ".*" 100lines.txt') DO (
 SET /a progress=%%a %% %blocksize%
 IF !progress!==1 IF %%a neq 1 (
  REM pause here
  timeout /t 10
 )
 ECHO(nsrjb -w -N %%b
)

GOTO :EOF

出于测试目的,我将块大小设置为23,并使用我的标准100行文本文件100lines.txt

您希望如何暂停此过程是您自己关注的问题。我只是使用timeout更改使用10秒延迟来适合自己。

为了测试目的,所需的nsrjb命令仅为ECHO在您确认命令正确之后,将ECHO(nsrjb更改为nsrjb以实际执行nsrjb。

只需使用findstr对每一行进行编号,然后在每行前加number:,然后在第一个令牌上标记=数字(%%a)和第二个令牌(%%b)= line-tail,使用冒号作为分隔符。

从那里,需要进行delyed-expansion(计算行数mod块大小)。如果结果为1,那么我们已经处理了一个行块,所以请等待,除非行号是1,这意味着我们关于处理第一行。

所以 - 处理一个块(你选择大小),等待(你选择时间)超时或按键;重复直到完成。

findstr命令可以转换文件中的行

u:\dir\file.txt
例如

4:u:\dir\file.txt

for命令使用tokens = 1*delims = :

首先取delims,这意味着"将行划分为令牌,使用:作为分隔符"

因此,4:u:\dir\file.txt会被分为3个令牌,4 u\dir\file.txt

如果令牌子句选择了1,2和3(tokens=1,2,3),那么令牌4 u\dir\file.txt将分别分配给%%a元变量分别在for指令,%%b%%c中提名(按字母顺序递增)。

特殊令牌"号码" *表示“最高指定的标记号"

之后的所有行

对于"tokens=1*",然后提名两个令牌(1*),因此第一个令牌值4被分配给%%a,剩下的在指定的最高标记号(1)之后经过标记分隔符的行将按字母顺序(%%b)分配给下一个元变量,因此u:\dir\file.txt被分配给%%b