set env的批处理脚本。变量启动OC4J并删除env。变量

时间:2015-12-10 12:25:22

标签: batch-file environment-variables oc4j

本地计算机上的

安装了Oracle客户端(11.2.0)和OC4J服务器(Oracle Containers for J2EE 10g(10.1.3.5.0)(内部版本090727.2000.36696)),它们都使用{{1环境变量所以我需要设置ORACLE_HOME仅在服务器启动时指向服务器文件夹

我正在尝试生成必须执行的批处理文件:

  1. 设置环境变量ORACLE_HOME
  2. 启动OC4J服务器
  3. 取消设置ORACLE_HOME变量
  4. 我正在尝试使用此脚本,但第三个语句永远不会运行。

    ORACLE_HOME

    所有这些命令都可以单独执行。但是,在同一个批处理脚本上,启动OC4J“永不”结束。任何想法我怎么能这样做?

    任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

启动Oracle服务器的批处理文件只需要以下两行:

set "ORACLE_HOME=C:\Servers\oc4j_extended_101350"
C:\Servers\oc4j_extended_101350\bin\oc4j.exe -start

如果oc4j.exe不是控制台应用程序,那么命令处理器会在启动oc4j.exe后立即继续处理批处理文件,从而导致关闭命令进程。

否则使用:

set "ORACLE_HOME=C:\Servers\oc4j_extended_101350"
start "Oracle Server" C:\Servers\oc4j_extended_101350\bin\oc4j.exe -start

为什么会这样?

Windows会自动为创建新流程的新流程创建当前流程的整个环境表的副本。

对于执行批处理文件ORACLE_HOME的命令进程,在批处理文件中指定的环境表中设置。

启动Oracle服务器环境表由Windows复制到Oracle服务器,包括当前定义的ORACLE_HOME。 Windows注册表中定义的内容无关紧要,不予考虑。 Oracle服务器不会查看是否还设置了ORACLE_HOME,如果是,则查看父进程或其他并行进程的值。

通过Windows演示环境表管理的一个简单示例。

  1. 打开命令提示符窗口并输入set x=Hello
  2. 输入set x,您会看到x=Hello
  3. 执行start,导致打开第二个命令提示符窗口。
  4. 键入第二个命令提示符窗口set x,您也会显示x=Hello
  5. 切换回第一个命令提示符窗口并运行set x=Hi
  6. 键入此第一个命令提示符窗口set x,您会看到x=Hi
  7. 再次切换到第二个命令窗口,输入set x,您仍会看到set x=Hello

    第二个命令进程获得了第一个命令进程的副本。因此,第一个命令进程的环境表中现在更改的内容对于第二个命令进程是不可见的。

  8. 在第二个命令窗口set x=Bye执行并使用set x进行验证。

  9. 切换回第一个命令窗口并输入set x

    它仍然是输出x=Hi,因为父进程也没有返回子进程在其环境表副本中修改的内容。

  10. 切换到第二个命令窗口并输入set path=以从此过程的环境表中删除环境变量 PATH

  11. 再次执行start以从第二个命令窗口打开第三个命令窗口。
  12. 输入set path,您只会显示

    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    
  13. 系统路径发生了什么?

    系统 PATH 以及与用户帐户相关的 PATH 仍在Windows注册表中设置,并为从桌面浏览器启动的新进程一起构建 PATH 处理。但是在第二和第三个命令进程的环境表中,不再有环境变量 PATH 。这两个流程现在必须在没有环境变量 PATH 的情况下工作。当然,对于第一个命令进程和所有其他正在运行的进程, PATH 仍然存在于其环境表中。