如何在批处理文件中跳过暂停

53
在Windows批处理文件中,myScript.bat运行otherScript.bat,在otherScript.bat中的第一行有一个暂停。
我该如何发送跳过myScript.bat中暂停的按键?这样我的脚本就不需要采取任何额外的按键,并且不会被暂停所阻塞。
3个回答

80
一种方法是使用echo命令来代替您进行按键操作。
例如:

myScript.bat

@echo OFF

@echo Calling otherScript.bat...
@echo | call otherScript.bat
@echo Done.

otherScript.bat

pause
@echo Hello World

Stefan的解决方案更加灵活,允许您控制何时暂停或不暂停,但如果由于某种原因无法修改otherScript.bat,则此解决方案将起作用。


两个答案都很棒,但我不能编辑otherScript.bat。所以接受这个答案。 - Stan
正是我正在寻找的解决方案 +1 - CraftyFella
我该如何在VBScript中实现这一点,例如在我的脚本“myscript.vbs”中?如果我使用命令WshShell.Run "| call otherScript.bat",1,true,则会出现无法等待进程的错误。 - user1066231
由于某种原因,我之前认为无法将内容管道传输到 .bat 文件中。现在我不得不思考还有哪些事情是我假定不能完成的!! - anjanb
6
你应该使用@echo. | call otherScript.bat(注意echo后面有一个点)。这样只会发送一个新行给另一个脚本,而不是发送字符串“ECHO is on.”或者类似的字符串。当另一个脚本中使用set /p命令时,发送字符串可能会产生负面效果。 - 816-8055

21

你可以修改 otherScript.bat 文件,使其接受一个可选参数,告诉它跳过暂停命令,如下所示:

if "%1"=="nopause" goto start
pause
:start

1
我建议使用< NUL而不是echo( |

myScript.bat

@echo OFF

@echo Calling otherScript.bat...
set var=One
< NUL call otherScript.bat
@echo Done. var=%var%

otherScript.bat

@echo off
pause
echo Hello World
set var=two

主要的区别是,其他脚本在同一个cmd.exe实例中运行,但是echo. | call ...将在子cmd.exe中运行。

子实例存在问题,即其他脚本可以修改环境变量,但更改在返回后会丢失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接