我需要执行一个命令100-200次,到目前为止,我的研究表明,我要么必须复制/粘贴这个命令的100份副本,要么使用for循环,但for循环需要一个项的列表,因此我需要200个文件进行操作,或者200个项的列表,这就不符合要求了。

我宁愿不编写C程序,也不愿意为了测试目的而编写另一个程序来执行我的程序。修改我的程序本身也不是一个选项。

那么,给定一个命令,a,我如何通过批处理脚本执行N次?

注意:我不想要一个无限循环

例如,下面是它在Javascript中的样子:

var i;
for (i = 0; i < 100; i++) {
  console.log( i );
} 

在Windows上运行的批处理脚本会是什么样子?


当前回答

DOS没有为此提供非常优雅的机制,但我认为您仍然可以通过合理的努力编写100或200次迭代的循环。虽然没有数字for循环,但可以使用字符串作为“循环变量”。

使用GOTO编写循环代码,并且对于每次迭代使用SET X=%X%@向环境变量X添加另一个@符号;并且要退出循环,将X的值与包含100(或200)个@符号的字符串进行比较。

我从来没有说过这是优雅的,但它应该工作!

其他回答

完美无缺的循环

set num=0
:loop
:: insert code
set /a num=%num%+1
if %num% neq 10 goto loop
::insert after code code

您可以通过将第5行中的10更改为任何数字来编辑它,以表示希望它循环的时间。

我有两个答案 方法1: 在批处理中插入Javascript

@if (@a==@b) @end /*

:: batch portion

@ECHO OFF

cscript /e:jscript "%~f0"


:: JScript portion */

Input Javascript here

(我不太懂JavaScript)

方法2: 批量循环

   @echo off
    set loopcount=5
    :loop
    echo Hello World!
    set /a loopcount=loopcount-1
    if %loopcount%==0 goto exitloop
    goto loop
    :exitloop
    pause

(感谢FluorescentGreen5)

或者你可以根据你想要循环的次数递减/增加一个变量:

SETLOCAL ENABLEDELAYEDEXPANSION
SET counter=200
:Beginning
IF %counter% NEQ 0 (
echo %x
copy %x.txt z:\whatever\etc
SET /A counter=%counter%-1
GOTO Beginning
) ELSE (
ENDLOCAL
SET counter=
GOTO:eof

显然,使用FOR /L是高速公路,而这是后街,需要更长的时间,但它们到达相同的目的地。

并迭代一个目录下的文件:

@echo off 
setlocal enableDelayedExpansion 

set MYDIR=C:\something
for /F %%x in ('dir /B/D %MYDIR%') do (
  set FILENAME=%MYDIR%\%%x\log\IL_ERROR.log
  echo ===========================  Search in !FILENAME! ===========================
  c:\utils\grep motiv !FILENAME!
)

你必须使用“enabledelayeexpansion”和!FILENAME!而不是$FILENAME$。在第二种情况下,DOS只解释变量一次(在它进入循环之前),而不是每次程序循环时都解释。

(编辑)我让它在100次之后停止

@echo off
goto actual
set /a loopcount=0
:actual
set /a loopcount=%loopcount% + 1
echo %random% %random% %random% %random%
timeout 1 /nobreak>nul
if %loopcount%== 100 goto stop
goto actual
:stop
exit

这将产生4个随机数每1秒100次。 取出“timeout 1 /nobreak>nul”使它运行得非常快。