有没有一种方法可以在命令提示符下运行相同的bat文件?

时间:2018-07-09 12:44:35

标签: batch-file cmd

我正在尝试从命令提示符处运行.bat脚本。但是,一旦脚本结束,我想要么自动再次运行bat脚本,要么返回到路径,然后手动输入bat脚本名称,然后再次运行。这些中的任何一个都会很好。

我尝试使用暂停或仅使用退出,但没有成功。

批处理脚本:

@echo off
title runner
set /p man=
if %man% == 1 goto Kane

:1
echo Hello Kane
pause
exit

1 个答案:

答案 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]

通常最好为/B使用EXIT参数,以便仅退出脚本执行,而不退出调用Shell进程。有时可能会立即终止调用Shell进程,但是大多数时候,EXIT /B是我想要的行为。

为什么是无限循环?

话虽这么说,可能有比无限循环更好的解决问题的方法。