Tom*_*ell 258 windows batch-file
我需要执行100-200次命令,到目前为止我的研究表明我要么必须复制/粘贴此命令的100个副本,要么使用for循环,但for循环需要一个项目列表,因此我需要要操作的200个文件,或200个项目的列表,都会失败.
我宁愿不必编写C程序并记录为什么我必须编写另一个程序来执行我的程序以进行测试.修改我的程序本身也不是一种选择.
那么,给定一个命令,a我将如何N通过批处理脚本执行它?
Jon*_*Jon 496
for /l 是你的朋友:
for /l %x in (1, 1, 100) do echo %x
Run Code Online (Sandbox Code Playgroud)
从1开始,一步一步,结束于100.
%如果它在批处理文件中,请使用两个
for /l %%x in (1, 1, 100) do echo %%x
Run Code Online (Sandbox Code Playgroud)
(这是我真正讨厌Windows脚本的事情之一)
如果循环的每次迭代都有多个命令,请执行以下操作:
for /l %x in (1, 1, 100) do (
echo %x
copy %x.txt z:\whatever\etc
)
Run Code Online (Sandbox Code Playgroud)
或者在批处理文件中
for /l %%x in (1, 1, 100) do (
echo %%x
copy %%x.txt z:\whatever\etc
)
Run Code Online (Sandbox Code Playgroud)
键:
/l表示for命令将以数字方式运行,而不是对一组文件进行操作
%x是循环变量
(起始值,值的增量,结束条件[包括])
Oli*_*eux 61
并迭代目录的文件:
@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!
)
Run Code Online (Sandbox Code Playgroud)
你必须使用"enableDelayedExpansion"和!FILENAME!而不是$ FILENAME $.在第二种情况下,DOS将只解释变量一次(在它进入循环之前),而不是每次程序循环.
Flu*_*en5 20
一个简单但计数循环的模板:
set loopcount=[Number of times]
:loop
[Commands you want to repeat]
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop
Run Code Online (Sandbox Code Playgroud)
示例:说"Hello World!" 5次:
@echo off
set loopcount=5
:loop
echo Hello World!
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop
pause
Run Code Online (Sandbox Code Playgroud)
这个例子将输出:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
小智 7
你也可以尝试这个而不是for循环:
set count=0
:loop
set /a count=%count%+1
(Commands here)
if %count% neq 100 goto loop
(Commands after loop)
Run Code Online (Sandbox Code Playgroud)
它非常小,这是我一直使用的.
或者您可以按要循环的次数递减/递增变量:
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
Run Code Online (Sandbox Code Playgroud)
显然,使用FOR /L是高速公路,这是后街需要更长的时间,但它到达同一个目的地.
小智 6
您可以对以下效果做一些事情来避免 FOR 循环。
set counter=0
:loop
echo "input commands here"
SET /A counter=%counter%+1
if %counter% GTR 200
(GOTO exit) else (GOTO loop)
:exit
exit
Run Code Online (Sandbox Code Playgroud)