1

是否可以在 windows 下运行批处理文件,就好像它是从运行 java 实例的同一个 shell 运行一样(而不是在新的控制台实例中)?

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

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

4

1 回答 1

3

简短的回答:没有。

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

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

  • 对该过程可见,并且
  • 对子进程可见,但
  • 永远不要到父进程。

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

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

选项包括:

  1. 将批处理文件写入
    • 调用你的另一个批处理文件,然后
    • 启动你的java进程,或者
  2. 通过您的 java 程序解析批处理文件。如果您“强制”您的“批处理文件”的唯一有效内容是“X=Y”形式的简单赋值语句,那么这并不太难——您实际上可以将它作为属性文件加载。
于 2013-01-08T08:01:18.390 回答