加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

窗口 – 检测批处理文件的执行方式

发布时间:2020-12-13 20:21:01 所属栏目:Windows 来源:网络整理
导读:假设Windows是否有一种方法可以从批处理文件中检测到,如果是从打开的命令提示符或双击启动的?当且仅当双击时,我想添加一个暂停到批处理过程结束,这样窗口不会随着可能产生的任何有用的输出消失. 任何聪明的方法来做到这一点我正在寻找可以依赖于使用默认设
假设Windows是否有一种方法可以从批处理文件中检测到,如果是从打开的命令提示符或双击启动的?当且仅当双击时,我想添加一个暂停到批处理过程结束,这样窗口不会随着可能产生的任何有用的输出消失.

任何聪明的方法来做到这一点我正在寻找可以依赖于使用默认设置配置的机器的解决方案.

我刚刚进行了一个快速测试,并注意到以下内容,这可能会帮助您:

>当从打开的命令提示符运行时,%0变量在路径周围没有双引号.如果脚本驻留在当前目录中,则该路径甚至不给出,只是批处理文件名.
>从资源管理器运行时,%0变量始终用双引号括起来,并包含批处理文件的完整路径.

如果从命令控制台运行,此脚本将不会暂停,但如果在资源管理器中双击该脚本:

@echo off
setlocal enableextensions

set SCRIPT=%0
set DQUOTE="

@echo do something...

@echo %SCRIPT:~0,1% | findstr /l %DQUOTE% > NUL
if %ERRORLEVEL% EQU 0 set PAUSE_ON_CLOSE=1

:EXIT
if defined PAUSE_ON_CLOSE pause

编辑:
从资源管理器运行时也有一些奇怪的行为,我无法解释.本来,而不是

@echo %SCRIPT:~0,1% | findstr /l %DQUOTE% > NUL
if %ERRORLEVEL% EQU 0 set PAUSE_ON_CLOSE=1

我试过只使用if:

if %SCRIPT:0,1% == ^" set PAUSE_ON_CLOSE=1

当从打开的命令提示符运行时,这将起作用,但是从Explorer运行时,它会抱怨if语句不正确.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读