自从我换到 Windows 7 后,每当我开发 .bat 脚本时,我只有一次机会来做对。一旦我执行脚本,即使执行似乎已经完成,它也会被未知进程锁定,我必须强制退出资源管理器或重新启动才能再次编辑 .bat 文件。
例如,如果我创建一个 .bat 文件,
@echo off
@start prog\ConsolePortable\ConsolePortable.exe
然后在执行之后意识到我需要更改脚本的某些方面,
@echo off
@cd prog\ConsolePortable
@start ConsolePortable.exe
然后我就无法保存更改。例如,在 gvim 中,我收到消息“'console.bat' 是只读的(添加 ! 来覆盖)”,然后当我尝试覆盖时,我收到消息“E212:无法打开文件进行写入”。
当然一定有某种不需要进程探索器在我使用的每台计算机上。如何找到 .bat 文件的进程并停止它?我尝试使用 ProcessExplorer 并尝试停止它,但 BSOD 使公司陷入困境。我也尝试过使用 cmd /c 代替 start。
编辑:ConsolePortable 在这里启动正常并且似乎退出正常,但是以下测试设置不会冻结编辑器:
// Program.java
class Program {public static void main(String[] args) {System.exit(0);}}
// startProgram.bat
echo Starting Program in Java ...
start java Program
echo exiting bat file ...
编辑 2:也许我应该提到我是使用 cygwin 中的 touch 命令创建该文件的。重新启动计算机后,我无法复制此问题,尽管我以前在其他计算机上遇到过此问题。
答案1
我想说这可能是你的编辑器有错误,或者你设置了奇怪的权限。
我经常使用记事本(运行时)编辑批处理文件,并没有遇到问题。
不过,我不确定您是否可以注入命令 - 它会记住它所在的行号(我认为)。
例如在你的bat文件中,启动后,它将完成处理。
在第三行放置一个暂停,然后运行,但暂停后不要按任何键。编辑原始 bat 文件,在第四行放置一个命令 - 您将看到第四行将被处理。
答案2
我会尝试改变路线
@start ConsolePortable.exe
到
@start "myProgram" ConsolePortable.exe
来自http://ss64.com/nt/start.html:
START“标题” [/Dpath] [选项]“命令” [参数]
笔记:
始终包含一个标题,这可以是一个简单的字符串,如“我的脚本”或只是一对空引号“”根据微软文档,标题是可选的,但如果省略它,您可能会遇到问题。
只需输入文件名作为命令,即可通过文件关联调用文档文件。例如,START "" WORD.DOC 将启动与 .DOC 文件扩展名关联的应用程序
前段时间,我尝试编写 VLC 脚本并在其中添加标题,解决了一个看似相关的问题,这让我措手不及。