如何在 CMD 上使用 BAT 多次运行单个命令

如何在 CMD 上使用 BAT 多次运行单个命令

我尝试运行下面的代码,但它给出了一个提示。我希望批处理文件多次运行命令“keygenerator.rb”。

@echo off
:x
:start
"C:\Ruby30-x64\bin\ruby.exe" "D:\folder\folder\folder\folder\keygenerator.rb" >> "D:\folder\folder\folder\folder\output.txt"
goto x

答案1

正确的批处理文件应该是这样的:

@echo off
:x
C:\Ruby30-x64\bin\ruby.exe D:\folder\folder\folder\folder\keygenerator.rb >> D:\folder\folder\folder\folder\output.txt
goto x

检查这是否能解决您的问题。

如果cmd中的路径不包含任何空格,则不需要双引号。

我曾写过这样的话:

:ping
ping 127.0.0.1
goto ping

结果:

在此处输入图片描述

我给你的代码应该可以工作,如果不能,那么错误就出在你的 ruby​​ 脚本上,你应该在问题正文中发布你的 ruby​​ 脚本。

答案2

也许你可以学习一些 PowerShell:

$Rubydir="C:\Ruby30-x64\bin"
$Rubyout="path\to\output.txt"
$Rubyscript="path\to\keygenetator.rb"

$N=0; $Limit=Read-Host "Please input loop limit"
While ($N -lt $Limit) { &"${Rubydir}\Ruby.exe" $Rubyscript |
   Out-File -File $Rubyout -Append; Write-Host "Loop $N in $Limit"; $N+=1 }

它的功能与发布的脚本大致相同@不是我确实如此。因为它很简单,所以我就让你自己去理解吧。

如果你想使用 for 循环:

$Rubydir="C:\Ruby30-x64\bin"
$Rubyout="path\to\output.txt"
$Rubyscript="path\to\keygenetator.rb"

$Limit=Read-Host "Please input loop limit"
For ($N=0;$N -lt $Limit;$N++) { &"${Rubydir}\Ruby.exe" $Rubyscript |
   Out-File -File $Rubyout -Append; Write-Host "Loop $N in $Limit" }

答案3


@echo off 

setlocal & cd /d "%~dp0"
set "_rb_dir=C:\Ruby30-x64\bin"
set "_rb_log=D:\Full\Path\to\file\output.txt"
set "_rb_scr=D:\Full\Path\to\file\keygenerator.rb"

pushd "%_rb_dir%" & for /L %%i in (1 1 20)do (
     ruby.exe "%_rb_scr%" >>"%_rb_log%"
     timeout 5
    )
    
popd

:: Run from here your next command if need

endlocal 

  • 为你的循环设置一个限制,或者goto :x将无限期地执行您的命令。
FOR /L %%parameter IN (start,step,end) DO command 
For /L %%i         IN (    1    1  20) DO command 

使用for /L循环,您可以在其中定义限制并
执行命令for /L循环直到已达到限制...


  • 实时监控当前循环执行的一个选项:
@echo off

setlocal & cd /d "%~dp0"
set /a "_cnt=0, _run=20"
set "_rb_dir=C:\Ruby30-x64\bin"
set "_rb_log=D:\Full\Path\to\file\output.txt"
set "_rb_scr=D:\Full\Path\to\file\keygenerator.rb"

pushd "%_rb_dir%" 

for /L %%i in (1 1 %_run%)do (
     set "_cnt=1000%%~i"
     ruby.exe "%_rb_scr%" >>"%_rb_log%"
     timeout 2|cmd/v/c "echo/Loop: !_cnt:~-3!/0%_run%"
    )
    
popd 

:: Run from here your next command if need

endlocal


受到...的评论和回答的启发@Xenεi Ξэnвϵς

答案4

循环文件的另一种方法是在文件末尾.bat引入文件名。这样,文件将再次调用自身,因为它被识别为命令.bat.bat本身

例如,您有一个仅包含以下内容的 bat 文件:

sfc /scannow
my_precious_batch_file

然后将文件另存为my_precious_batch_file.bat。这将使sfc /scannow命令运行,然后.bat再次调用并再次运行sfc /scannow命令。完美的循环。

只是不要将.bat文件命名为与 Windows 命令相同的名称,否则文件.bat将再次自行运行,而不是运行 Windows 命令。例如,不要将文件命名为sfc.bat。它永远不会以sfc /scannow这种方式运行,它只会用文件内容充斥您的屏幕.bat,并且不会运行命令,因为它只是在第一行调用自身。一个完美的无所事事的循环……

偶然发生这种情况的例子:

在 Windows 中,如果您有一个与文件名同名的命令行可执行文件.bat,并且批处理文件包含此命令,则批处理文件将继续循环,因为 Windows 将执行该.bat文件而不是 Windows 命令。

来源:Huseyin Yagli @ Stack Overflow。 “我的批处理文件不断循环,但是为什么呢?“。2016 年 7 月 18 日 10:14。

相关内容