【问题标题】:Run batch file from within runtime environment从运行时环境中运行批处理文件
【发布时间】:2013-01-08 05:17:24
【问题描述】:

是否可以在 windows 下运行批处理文件,就好像它是从运行 java 实例的同一个 shell 运行一样(而不是 in a new console instance)?

我想运行一个由第三方提供的批处理文件,并有条件地设置了一堆环境变量,我宁愿 必须翻译成 Java,但那是需要 Java 应用程序中的某些东西才能工作。

我知道另一种方法是在运行 Jar 之前在命令提示符中手动运行批处理文件以获得相同的效果,但在这种情况下需要大量输入或大量自定义批处理文件。

【问题讨论】:

  • 在新的控制台窗口中运行有什么问题?
  • @defaultlocale set PATH=%PATH%;foo 之类的语句仅适用于新实例,而不适用于 java 实例。

标签: java windows batch-file runtime environment-variables


【解决方案1】:

简短回答:不。

当您声明“从运行 java 实例的同一 shell 运行”时,您似乎暗示 shell 和 java 在某个公共/共享级别共存。相反,它们的关系是分层的:shell 是父进程,它启动 java 作为子进程。

流程(例如您的批处理)对环境所做的任何更改是:

  • 对该进程可见,并且
  • 对子进程可见,但
  • 从不访问父进程。

批处理文件在命令提示符下执行时会立即更改当前环境的原因是命令外壳 (cmd.exe) 旨在“就地”处理批处理文件 - 无需启动新进程 [在 unix 下,shell 会“获取”一个脚本文件来做同样的事情]。

Java,不是“cmd.exe”,不会这样做。正如您所指出的,从 java 运行批处理文件将创建一个新的命令处理器作为子进程,完成后对 java 环境没有影响。

选项包括:

  1. 将批处理文件写入
    • 调用您的其他批处理文件,然后
    • 启动您的 java 进程,或者
  2. 通过您的 java 程序解析批处理文件。如果您“强制”您的“批处理文件”的唯一有效内容是“X=Y”形式的简单赋值语句,那么这并不太难——您实际上可以将其加载为Properties file

【讨论】:

  • 我害怕这个。我必须找出最好的行动方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-29
  • 2012-08-07
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多