Alo*_*dal 23 windows cmd batch-file
我喜欢在我的cmd.exe脚本中有一个典型的"usage:"行- 如果缺少一个参数,用户可以简单地提醒我们如何使用脚本.
问题是我无法安全地预测潜在用户是否会使用GUI或CLI.如果有人使用GUI在资源管理器窗口中双击此脚本,他们就没有机会阅读任何内容,除非我pause在窗口中.如果他们使用CLI,pause会打扰他们.
所以我正在寻找一种方法来检测它.
@echo off
if _%1_==__ (
echo usage: %nx0: filename
rem now pause or not to pause?
)
Run Code Online (Sandbox Code Playgroud)
有一个很好的解决方案吗?
MBu*_*MBu 18
您可以检查%CMDCMDLINE%变量的值.它包含用于启动的命令cmd.exe.
我准备了一个测试.bat文件:
@Echo Off
echo %CMDCMDLINE%
pause
Run Code Online (Sandbox Code Playgroud)
从打开的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
)
Run Code Online (Sandbox Code Playgroud)
编辑:针对评论中讨论的问题更改实施的修复; 编辑过的例子来演示它们
:: exit if not interactive
echo %CMDCMDLINE% | find /i "/c"
if not ERRORLEVEL 1 goto:eof
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6493 次 |
| 最近记录: |