windows - 确定是否已从命令行 (cmd) 启动/执行批处理脚本 - 或 - 暂停或不暂停?

标签 windows cmd batch-file

我喜欢在我的 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/

相关文章:

PHP Memcache 连接到 couchbase 但不能做任何其他事情

batch-file - 如何使用qpdf解密多个pdf文件?

python - 为什么 sys.exit() 导致回溯?

arrays - 批量嵌套变量

windows - 如何在 PATH 中包含 %ProgramFiles%?

batch-file - 在 Windows 2008 服务器中运行 powershell 脚本时出现 Windows 任务计划程序问题

c++ - Windows/C++ : how to use a COM dll which is not registered

c - 重命名文件预操作 Windows Minifilter 驱动程序

windows - 如何手动创建 Apache Windows 服务

windows - 为什么在迭代命令输出时批处理文件 FOR 失败?