6

下面是我的要求。

@echo off
cls
Set Sleep=0
:start
echo This is a loop
xx.exe yyyyy.dll /p:InputDataSource=Table:table.xml
Set /A Sleep+=1
echo DisplayingSleepvalue
echo %Sleep%
goto start

在这里,我想执行xx.exe yyyyy.dll /p:InputDataSource=Table:table.xml这条线30 次.... 任何人都可以帮我解决这个问题。

谢谢,
马纳萨

4

3 回答 3

11

试试这种方式: -

@echo off
cls
Set Sleep=0
:start
if %Sleep% == 30 ( goto end )
xx.exe yyyyy.dll /p:InputDataSource=Table:table.xml
echo This is a loop
Set /A Sleep+=1
echo %Sleep%
goto start
:end
echo "am 30 now"
pause
于 2012-04-09T12:12:11.407 回答
9

您可以使用GOTO带有递增计数器的循环,但FOR /L循环效率更高。

for /l %%N in (1 1 30) do someCommand

通过键入HELP FORFOR /?从命令行研究可用的文档。

如果要重复整个代码块,请将代码块括在括号中。您可以使用FOR %%N变量代替Sleep变量。

@echo off
cls
for /l %%N in (1 1 30) do (
  echo This is a loop
  xx.exe yyyyy.dll /p:InputDataSource=Table:table.xml
  echo DisplayingSleepvalue
  echo %%N
)

您的示例不需要它,但如果您想在循环中操作环境变量,则必须使用延迟扩展。正常扩展%sleep%仅在解析整个循环时扩展一次,而您需要在!sleep!每次循环迭代的执行时扩展该值。延迟扩展必须先启用,然后才能使用。

@echo off
setlocal enableDelayedExpansion
cls
set sleep=0
for /l %%N in (1 1 30) do (
  echo This is a loop
  xx.exe yyyyy.dll /p:InputDataSource=Table:table.xml
  set /a sleep+=1
  echo DisplayingSleepvalue
  echo !sleep!
)
于 2012-04-09T12:06:08.050 回答
2

你有循环,只需添加一些数学。

@echo off
set executecounter=0
:loop
(Insert your command here)
set /a executecounter=%executecounter%+1
if "%executecounter%"=="30" goto done
goto loop
:done
echo Complete!
pause

这将在每次命令执行时增加计数器,当它执行 30 次时,程序将结束。

于 2012-12-28T01:37:56.497 回答