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

windows – 检测批处理文件中是否打开了文件

发布时间:2020-12-14 01:48:22 所属栏目:Windows 来源:网络整理
导读:假设我有一个用于执行长版本的批处理文件,最后它创建了一个EXE.如果我在开始构建之前忘记关闭应用程序,则链接阶段会在无法重新创建EXE时失败. 我想检查EXE是否在构建开始时打开.我尝试将EXE文件重命名为自身,但是虽然这给出了拒绝访问错误,但重命名命令(作为
假设我有一个用于执行长版本的批处理文件,最后它创建了一个EXE.如果我在开始构建之前忘记关闭应用程序,则链接阶段会在无法重新创建EXE时失败.

我想检查EXE是否在构建开始时打开.我尝试将EXE文件重命名为自身,但是虽然这给出了拒绝访问错误,但重命名命令(作为内部命令)不会设置%ErrorLevel%.

检查将%ErrorLevel%设置为非零值的打开文件的非破坏性方法是什么?

重命名方法对我不起作用(在 Windows XP SP3上测试).我开始一个任意的应用程序,并试图将其重命名为自己.没有错误,没有任何影响.

但是,这种方法确实有效:

COPY /B app.exe+NUL app.exe

当应用程序运行时,此命令产生了一条错误消息.当应用程序未被打开时,不仅此命令保留了文件的内容,而且还使修改时间戳保持不变.

因此,如果我是你,我可能会以这种方式使用此命令(在批处理脚本的开头,就像你说的那样):

COPY /B app.exe+NUL app.exe >NUL || (GOTO :EOF)

||如果上一个命令失败,则运算符将控制权传递给它旁边的命令/块(提高错误级别值).因此,如果COPY失败,上述命令将终止脚本(如果文件打开,它将会终止).

将保留错误消息(因为此类消息通常发送到所谓的标准错误设备,并且不会被> NUL重定向丢弃,而其他非错误消息通常会被发送到标准输出,因此可以被抑制使用> NUL)并作为脚本提前终止的解释.但是,如果您想显示自己的消息,可以尝试这样的事情:

COPY /B app.exe+NUL app.exe >NUL 2>NUL || (ECHO Target file inaccessible& GOTO :EOF)

当> NUL隐藏发送到标准输出的任何内容时,2> NUL对标准错误执行相同操作.

(编辑:李大同)

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

    推荐文章
      热点阅读