使用bat批处理读取注册表来提取Oracle环境变量的方法
本文所示提取的Oracle环境变量用ORACLE_HOME作为代表!
在linux或者unix环境上,很容易得到Oracle数据库的环境变量信息,比如:查看ORACLE_HOME
[oracle@centos5 ~]$ echo $ORACLE_HOME /u01/oracle/product/11.2
在windows上可能稍微麻烦些了。如果windows系统上安装了Oracle服务器的话,正常情况下是有ORACLE_HOME这个环境变量的。
C:\>echo %oracle_home% e:\oracle\db_1
将环境变量oracle_home赋值给其它变量用:set abc="%oracle_home%"
如果Oracle服务器的环境变量配置不正确或者只安装了Oracle客户端程序的话,本文将给出提取ORACLE_HOME的方法。
提取注册表使用的命令为:reg query 或者 reg export,命令语法为:
REG QUERY KeyName [/v ValueName | /ve] [/s]
REG EXPORT KeyName FileName
查看命令的具体参数,使用:reg export /? 或者 reg query /?
Oracle数据库安装完成后,在注册表中可以找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE子项,其中包含Oracle数据库、客户端还有其它产品的子项。
如果清楚ORACLE_HOME项具体位置的话,使用reg query可以查询到:
C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1" /v ORACLE_HOME ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1 ORACLE_HOME REG_SZ C:\Oracle\product\10.1.0\Client_1
如果不能确定ORACLE_HOME项所在的子项位置的话,使用:
C:\>reg export "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" oracle_env.reg 操作成功结束 C:\>type oracle_env.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE] "inst_loc"="C:\\Program Files\\Oracle\\Inventory" [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1] "ORACLE_HOME"="C:\\Oracle\\product\\10.1.0\\Client_1" "ORACLE_HOME_NAME"="OraClient10g_home1" "ORACLE_GROUP_NAME"="Oracle - OraClient10g_home1" "NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" "ORACLE_BUNDLE_NAME"="Enterprise" "SQLPATH"="C:\\Oracle\\product\\10.1.0\\Client_1\\dbs" "ORACLE_HOME_KEY"="SOFTWARE\\ORACLE\\KEY_OraClient10g_home1"
下面对提取到的oracle_env.reg文件进行字符处理以得到ORACLE_HOME变量。
先提取ORACLE_HOME变量所在的行:
C:\>find """ORACLE_HOME""=" oracle_env.reg ---------- ORACLE_ENV.REG "ORACLE_HOME"="C:\\Oracle\\product\\10.1.0\\Client_1"
使用for命令提取ORACLE_HOME右边的目录:
find """ORACLE_HOME""=" oracle_env.reg>temp1.txt for /f "skip=2 tokens=1,2 delims==" %a in (temp1.txt) do echo %b "C:\\Oracle\\product\\10.1.0\\Client_1"
需要将"C:\\Oracle\\product\\10.1.0\\Client_1"中的\\替换成\即可。set "my_oracle_home=%b:\\=\%"
合并起来,
@echo off reg export "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" oracle_env.reg find """ORACLE_HOME""=" oracle_env.reg>temp1.txt for /f "skip=2 tokens=1,2 delims==" %a in (temp1.txt) do ( set "b=%b" ) set "my_oracle_home=%b:\\=\%" echo %my_oracle_home%
注意如果将上述命令写到bat文件中的话,需要将%a和%b分别替换为:%%a和%%b。下载脚本文件:get_env_by_reg_export.bat
如果知道ORACLE_HOME所在子项为KEY_OraClient10g_home1的话,可以使用下面的语句:
@echo off reg query "HKLM\SOFTWARE\ORACLE\KEY_OraClient10g_home1" /v ORACLE_HOME >temp.txt 2>nul if %ERRORLEVEL% gtr 0 goto end set x="" set y="" for /f "skip=4 tokens=1,2 delims=:" %a in (temp.txt) do ( set "x=%a" set "y=%b" ) set "my_oracle_home=%x:~-1%:%y%" echo "%my_oracle_home%" del /Q temp.txt goto exit :end echo "ORACLE_HOME不存在!" :exit
下载脚本文件:get_env_by_reg_query.bat