我喜欢在我的cmd.exe脚本中有一个典型的"usage:“行--如果缺少一个参数,就会给用户一个简单的提示,告诉用户如何使用脚本。
问题是我不能安全地预测潜在用户是否会使用GUI或CLI。如果有人使用图形用户界面双击资源管理器窗口中的脚本,他们将没有机会阅读任何东西,除非我pause窗口。如果他们使用命令行界面,pause会困扰他们。
所以我正在寻找一种方法来检测它。
@echo off
if _%1_==__ (
echo usage: %nx0: filename
rem now pause or not to pause?
)在这个问题上有什么好的解决方案吗?
发布于 2012-02-24 06:18:40
您可以检查%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
)编辑:实现了对注释中讨论的问题更改的修复;编辑了示例以演示它们
发布于 2012-09-27 04:57:26
:: exit if not interactive
echo %CMDCMDLINE% | find /i "/c"
if not ERRORLEVEL 1 goto:eof发布于 2012-02-24 06:12:52
这里,我写了一些东西..。
Usage.bat
@echo off
if arg%1==arg goto help
goto action
:action
echo do something...
goto end
:help
set help1=This is Help line 1.
set help2=This is Help line 2.
cmd.exe /k "echo %help1% &echo %help2%"
goto end
:end它不是完美的,但它可以工作!:D
-joedf
https://stackoverflow.com/questions/9419875
复制相似问题