【问题标题】:Is there a way to countinue to run the same bat file in command prompt?有没有办法在命令提示符下继续运行相同的 bat 文件?
【发布时间】:2018-07-09 12:44:35
【问题描述】:

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

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

批处理脚本:

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

:1
echo Hello Kane
pause
exit

【问题讨论】:

  • 不要使用exit,而是使用goto top,并将标签:top放在您想要返回的位置?
  • FYI 命令提示符中的向上/向下箭头将导航您之前输入的命令,这可以节省一些重新输入。
  • 我确定 pauseexit 确实有效;为什么要期望他们建立一个循环,而他们不打算这样做?
  • 我想知道,为什么你不抱怨像The system cannot find the batch label specified - Kane 这样的错误... // 而不是pauseExit,看看GOTO 命令跨度>
  • @Stephan 是的,它已在我的代码中修复,但是当我复制并粘贴到堆栈溢出时,我把它搞砸了。谢谢你让我知道

标签: batch-file cmd


【解决方案1】:

学术答案

在某种意义上,当启动另一个 cmd 脚本时,可以让 cmd 替换自身。

"%~0" %*

这将调用自身而不返回。 (仅使用%* 将无法在传递给此脚本的任何需要引用或转义的命令行参数中正常工作。如果需要,您必须构建自己的循环来处理它。)

示例

@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 是我想要的行为。

为什么是无限循环??

话虽如此,可能有比无限循环更好的方法来解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2017-02-27
    • 2017-11-12
    • 1970-01-01
    • 2015-03-28
    • 2018-09-17
    相关资源
    最近更新 更多