是否可以在Windows下运行批处理文件,就好像它是从运行java实例的相同shell运行(而不是in a new console instance)?
我想运行一个由第三方提供的批处理文件并有条件地设置一堆环境变量,我宁愿不必须转换为Java,但那是Java应用程序中的某些东西需要工作。
我知道另一种方法是在运行Jar之前在命令提示符中手动运行批处理文件以获得相同的效果,但在这种情况下需要大量输入或大量自定义批处理文件。
答案 0 :(得分:3)
简答:不。
当您声明“从运行java实例的同一个shell运行”时,您似乎建议使用shell& java在某些公共/共享级别共存。相反,它们的关系是分层的:shell是一个父进程,它将java作为子进程启动。
流程对环境所做的任何更改(例如批处理)都是:
批处理文件从命令提示符执行时导致立即更改当前环境的原因是命令shell(cmd.exe)旨在“就地”处理批处理文件 - 而不启动新进程[在unix下,shell将“源”一个脚本文件做同样的事情。
Java,而不是“cmd.exe”,不会这样做。正如您所指出的,从java运行批处理文件将创建一个新的命令处理器作为子进程,该进程在完成时对java环境没有影响。
选项包括: