批处理文件命令PAUSE不起作用

问题描述 投票:0回答:8

我正在创建一个简单的批处理文件来协助完成一些事情,并且我还打印了一些说明,希望用户在退出之前看到这些说明。目前,窗口关闭得很快。所以我在文件末尾添加了

PAUSE
,但它不起作用。

我查看了有关 SO 的其他问题,并检查过以确保行结尾是

CRLF
并且文件末尾有
CRLF

有什么建议吗?

windows-7 batch-file
8个回答
165
投票

如果最后一个命令失败,暂停将不起作用。

您可以通过将“call”放在您正在运行的命令前面(无论暂停之前是什么命令)来修复它,然后暂停就会起作用。

例如,我有一个 phpunit 批处理文件,如下所示:

phpunit tests/sometests.php
pause

当 phpunit 失败时,它会直接退出而不暂停。将其更改为这样可以正确暂停:

call phpunit tests/sometests.php
pause

3
投票

暂停前的最后一条命令是否执行成功?介意分享你的脚本 - 至少最后几个命令吗?

或者,由于您似乎使用的是 Windows7,请尝试“超时”命令,看看是否有效。


2
投票

我什至在回声上也遇到了问题...... 假设是由长批处理文件引起的...暂停正在执行,但它没有暂停,几乎就像执行暂停后按下了一个键。

尝试了上面建议的解决方案;没有一个起作用。

因此,仅供将来参考,这就是我所做的:

基本上只是“暂停 > nul && 暂停 > nul”;每次都有效。

@echo off

CALL :ForcePause "Press any key to resume."
ECHO.
ECHO Hello World!
ECHO.
CALL :ForcePause "Press any key to exit."

EXIT

REM You can remove echo if you don't want to pass custom string for pause
:ForcePause
echo %~1
pause > nul && pause > nul
GOTO :EOF

0
投票

我想我知道问题出在哪里,我也遇到了同样的问题。因此,如果您这样做,您将创建一个新文件,并将所有批次信息放入其中,然后像普通文本一样保存,之后只需重命名扩展名,它就不起作用了:)。您必须通过文本编辑器保存它,然后从那里您必须选择“批处理文件(.bat;.cmd;*.nt)”,例如Notepad ++,这可能是因为编码的原因,所以这样做,我我认为会没事的。 GL! :)


0
投票

除了 Tim 的回答之外,如果您希望窗口始终显示,您可以编写 .bat 文件,如下所示:

call phpunit tests/sometests.php
cmd /k

0
投票

我也有同样的问题。出现这种情况有两个原因:
第一个是当以管理员身份运行批处理文件时

我已将批处理文件移至桌面并以管理员身份尝试,效果很好。
我尝试将批处理文件移动到任何磁盘根目录(如 C:\ D:\ 等)并且它可以正常工作。
我尝试将批处理文件移动到任何带空格的目录,它工作正常。

第二个也是主要原因是:批处理文件目录中存在一些特殊字符(例如@或&或类似的东西)

只需找到这个特殊字符并将其从文件夹名称中删除即可。并且它会正常工作。


0
投票

我不明白为什么

pause
只在我的脚本中短暂暂停。这里的答案帮助我解决了问题,我终于弄清楚我的案例中发生了什么:

开始/b

如果您使用

start /b
运行应用程序,应用程序可能会在延迟后将一些输出发送到 stdout。如果在运行
pause
命令时出现该输出,它将被解释为击键,并且脚本自然会继续。如果您将
start /b
与连接到远程计算机的命令一起使用,那么您肯定会遇到此问题:

start /b plink [email protected] -pw raspberry "sudo apt-get update"
pause

解决方法是使用

pause >nul && pause
代替


0
投票

仅供参考:上面显示的内容在 Win7 中对我不起作用。
然而,这最终成功了:

PAUSE 0<CON

这也不适用于“超时”。
没有它,它会得到这个:

ERROR: input redirection not supported,...

有了它,它就得到了:

ERROR: The handle is invalid.

就我而言,这样做后发生了这种情况:

start /WAIT cmd.exe /V:ON /k "set IEdir & pushd %IEdir% & cd & call "C:\Program Files\Internet Explorer\iexplore.exe" & set XsetRC1=!errorlevel! & set Xset & echo Xrc1=!XsetRC1! & popd & timeout /T 3 & EXIT !XsetRC1!"

IE 返回 RC=1(KILL 也会得到什么)。

但是,对 FireFox 和 Thunderbird 执行完全相同的操作:

start /WAIT cmd.exe /V:ON /k "set FFdir & pushd %FFdir% & cd & call "C:\FireFox\FireFox.exe" & set XsetRC1=!errorlevel! & set Xset & echo Xrc1=!XsetRC1! & popd & timeout /T 3 & EXIT !XsetRC1!"

当 FF 和 TB 返回 RC=0 时,“超时”确实可以正常工作。

另请注意,PAUSE 在 Win10 中不会失败。

© www.soinside.com 2019 - 2024. All rights reserved.