2013-01-08 88 views
1

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

有,我要运行由第三方提供的批处理文件,并设置了一堆的环境变量的条件,我宁愿有翻译成Java,但需要对某些事情在Java应用程序中工作。

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

+0

在新的控制台窗口中运行有什么问题? –

+1

@defaultlocale语句像'set PATH =%PATH%; foo'只适用于新实例,而不是java实例。 – Qix

回答

3

简答:没有。

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

一个进程进行任何更改(如批生产过程)对环境有:

  • 可见这一进程,并
  • 可见的子进程,但
  • 从来没有到父处理。

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

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

选项包括:

  1. 编写一个批处理文件来
    • 打电话给你的其他的批处理文件,然后
    • 启动Java进程或
  2. 通过解析批处理文件的java程序。如果您“强制”您的“批处理文件”的唯一有效内容是“X = Y”格式的简单赋值语句,那么这并不难 - 您实际上可能会将其加载为Properties file
+0

我很害怕这个。我必须找出最佳的行动方案。谢谢! – Qix