从运行时环境中运行批处理文件

时间:2013-01-08 05:17:24

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

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

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

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

1 个答案:

答案 0 :(得分:3)

简答:不。

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

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

  • 对该流程可见,
  • 对子进程可见,但
  • 从不到父进程。

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

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

选项包括:

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