我正在尝试从命令提示符处运行.bat
脚本。但是,一旦脚本结束,我想要么自动再次运行bat脚本,要么返回到路径,然后手动输入bat脚本名称,然后再次运行。这些中的任何一个都会很好。
我尝试使用暂停或仅使用退出,但没有成功。
批处理脚本:
@echo off
title runner
set /p man=
if %man% == 1 goto Kane
:1
echo Hello Kane
pause
exit
答案 0 :(得分:0)
在启动另一个cmd脚本时,有可能在某种程度上让cmd替换自身。
"%~0" %*
这将调用自身而不返回。
(仅使用%*
不能在传递给该脚本的任何命令行参数中使用引号或转义正常工作。如果需要,您必须构造自己的循环来处理该问题。)< / em>
@ECHO OFF
@ECHO Start: %LOOP_COUNT%
SET /A LOOP_COUNT=LOOP_COUNT+1
IF "%LOOP_COUNT%" GEQ "5" (
@ECHO Finished.
EXIT /B
)
@ECHO Looping: %LOOP_COUNT%
"%~0"
@ECHO THIS SHOULD NEVER HAPPEN
此脚本将调用自身,每次递增LOOP_COUNT
,直到达到6。然后退出。
请注意,脚本的最后一行将永远不会执行,因为正在运行的脚本已被“替换”(IDK这个概念的cmd说法)。
注意:如果您不想替换脚本(几乎总是我想要的脚本),则可以使用CALL "%~0"
来调用它,而不仅仅是调用它直接(即"%~0"
)。
运行上述脚本(我将其称为loop.cmd)时,我得到:
c:\work\nsa_eavesdropping\scripts>loop.cmd
Start:
Looping: 1
Start: 1
Looping: 2
Start: 2
Looping: 3
Start: 3
Looping: 4
Start: 4
Finished.
通常最好为/B
使用EXIT
参数,以便仅退出脚本执行,而不退出调用Shell进程。有时可能会立即终止调用Shell进程,但是大多数时候,EXIT /B
是我想要的行为。
话虽这么说,可能有比无限循环更好的解决问题的方法。