我喜欢PAUSE在我的*.bat脚本中有一个final ,所以我可以在Windows资源管理器中双击它们并有机会读取输出.但是,当我从命令行运行相同的脚本时,最终的PAUSE是一个烦恼.
有没有办法检测我们是否从命令提示符(或不是)运行脚本并相应地插入PAUSE(或不)?
(目标环境是Windows XP及更高版本.)
我已经设法从安德斯的回答中得出这个结论:
(((echo.%cmdcmdline%)|find /I "%~0")>nul)
if %errorlevel% equ 0 (
set GUI=1
) else (
set CLI=1
)
Run Code Online (Sandbox Code Playgroud)
然后,我可以做这样的事情:
if defined GUI pause
Run Code Online (Sandbox Code Playgroud)
And*_*ers 19
@echo off
echo.Hello World
(((echo.%cmdcmdline%)|find /I "%~0")>nul)&&pause
Run Code Online (Sandbox Code Playgroud)
...仅限NT +,Win9x中没有%cmdcmdline%.
正如EM在评论中指出的那样,将所有这些放在一行上会打开一些边缘情况,其中%cmdcmdline%将从括号中转出.解决方法是使用两行:
@echo off
echo.Hello World
echo.%cmdcmdline% | find /I "%~0" >nul
if not errorlevel 1 pause
Run Code Online (Sandbox Code Playgroud)