【问题标题】:prevent Windows .bat file from quiting防止 Windows .bat 文件退出
【发布时间】:2014-07-18 18:22:33
【问题描述】:

我有一个非常简单的 Windows .BAT 文件:

set PATH=c:\xxx;%PATH%
call foo.pl
set VAR=true

我认为“call”会启动一个新的批处理,而不影响当前的批处理。但是,批处理文件在foo.pl 完成执行后立即退出。 set VAR=true 从未被调用过。

有办法解决吗?

【问题讨论】:

  • 你怎么知道set VAR=true 从来没有被调用过?
  • 如你所说,“调用”将启动一个新的批处理进程,不是珍珠进程!

标签: windows batch-file cmd


【解决方案1】:

foo.pl 不是批处理文件,而是 Perl 脚本。

所以你需要使用

path c:\xxx;%PATH%
"Path to\Folder With\perl.exe" "foo.pl"
rem Additional batch code executed after Perl script execution finished.

换句话说,您最好使用完整路径运行控制台应用程序perl.exe,或者如果 Perl 的程序文件文件夹在使用此批处理文件的所有计算机上并不相同,则仅使用 perl.exe,希望 PATH 还包含包含perl.exe 的目录。

如果您在命令行或批处理文件中仅指定 foo.pl,Windows 会在 Windows 注册表中查找与 .pl 关联的应用程序以执行操作打开。如果存在这样的文件关联,Windows 会在单独的进程中运行此应用程序,就像使用命令 start 时一样。

所以使用call foo.pl 就像使用start foo.pl

PATH 不仅是一个环境变量,而且是一个用于在批处理文件中随时更改环境变量PATH 值的内部命令。这就是我从第一行删除set 的原因。修改环境变量PATH最好使用内部命令path

【讨论】:

  • 我不知道path ...set path=... 之间的任何功能差异。 pathset 都是内部命令,所以我不明白为什么一个比另一个更好。
  • 除了set "PATH=..."外,确实没有功能上的区别,可以使用双引号添加带有&等特殊字符的目录路径,而path ...则需要转义@987654337 @ 和 ^ 因为双引号不能与 path 一起使用。我对 better 的选择并不好。我更喜欢 path 而不是 set PATH=,因为文本编辑器中的字符少了 4 个,语法高亮效果更好。 (path 这个词在我的编辑器中始终作为内部命令突出显示,即使在命令 set 之后,除非用百分号或双引号括起来。)
猜你喜欢
  • 2012-11-16
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
相关资源
最近更新 更多