我尝试运行下面的代码,但它给出了一个提示。我希望批处理文件多次运行命令“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
-
[√]放 /?
[√]命令 /?
[√]For 循环
[√]For/L 循环
[√]Pushd | Popd
受到...的评论和回答的启发@Xenεi Ξэnвϵς
- 在电源外壳:
- 它的功能与发布的脚本大致相同
@不是我
@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。