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

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

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

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

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

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

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


当前回答

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

@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只解释变量一次(在它进入循环之前),而不是每次程序循环时都解释。

其他回答

不确定这样的答案是否已经提交,但你可以尝试这样的回答:

@echo off
:start
set /a var+=1
if %var% EQU 100 goto end
:: Code you want to run goes here
goto start

:end
echo var has reached %var%.
pause
exit

变量%var%将增加1,直到它达到100,这时程序将输出它已完成执行。同样,不确定这个是否已经提交或类似的东西,但我认为它可能是最紧凑的。

完美无缺的循环

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

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

你可以不使用for语句^.^:

@echo off
:SPINNER
SET COUNTP1=1

:1
CLS
 :: YOUR COMMAND GOES HERE
IF !COUNTP1! EQU 200 goto 2

SET COUNTP1=1
) ELSE (
SET /A COUNTP1+=1
)
goto 1

:2
:: COMMAND HAS FINISHED RUNNING 200 TIMES

它有基本的理解。试一试吧。: P

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

@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只解释变量一次(在它进入循环之前),而不是每次程序循环时都解释。

我用这个。它和其他的是一样的,但是它只是另一种写法。

@ECHO off
set count=0
:Loop
if %count%==[how many times to loop] goto end
::[Commands to execute here]
set count=%count%+1
goto Loop
:end