我喜欢在我的 cmd.exe
脚本中有一个典型的“usage:”行——如果缺少一个参数,则会简单地提醒用户如何使用该脚本。
问题是我无法安全地预测潜在用户会使用 GUI 还是 CLI。如果使用 GUI 的人在资源管理器窗口中双击此脚本,他们将没有机会阅读任何内容,除非我暂停
窗口。如果他们使用 CLI,pause
会打扰他们。
所以我正在寻找一种检测它的方法。
@echo off
if _%1_==__ (
echo usage: %nx0: filename
rem now pause or not to pause?
)
有好的解决方案吗?
最佳答案
您可以检查 %CMDCMDLINE%
变量的值。它包含用于启动 cmd.exe
的命令。
我准备了一个测试.bat文件:
@Echo Off
echo %CMDCMDLINE%
pause
当从打开的 cmd.exe
窗口内部运行时,脚本打印 "C:\Windows\system32\cmd.exe"
。
双击运行时打印cmd/c ""C:\Users\mbu\Desktop\test.bat""
因此,要检查您的脚本是否通过双击启动,您需要检查 %cmdcmdline%
是否包含脚本的路径。最终的解决方案如下所示:
@echo off
set interactive=1
echo %cmdcmdline% | find /i "%~0" >nul
if not errorlevel 1 set interactive=0
rem now I can use %interactive% anywhere
if _%1_==__ (
echo usage: %~nx0 filename
if _%interactive%_==_0_ pause
)
编辑:对评论中讨论的问题更改实现修复;编辑示例以演示它们
关于windows - 确定是否已从命令行 (cmd) 启动/执行批处理脚本 - 或 - 暂停或不暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419875/