我们公司有许多Oracle-Database-Client版本。
tnsnames.ora 会经常更改。
我喜欢创建一个包(批处理)来备份(重命名)所有版本的Oracle Client中的当前文件(如果安装了两个或更多版本),之后复制新文件。
我的脚本现在看起来如此:
setlocal enabledelayedexpansion
set /a count=0
set OracleDir="%SystemDrive%\oracle\product"
for /d %%i in (%OracleDir%\*) do (
set dir=%%i\client_1\network\admin\
PushD !dir:\\=\!\
for /f "tokens=*" %%a in ('dir /b /od tnsnames.ora') do (
rename "%%a" "tnsnames-%Date%-Backup-!count!.bak"
)
set /a count+=1
IF NOT EXIST "%%i\client_1\network\admin\tnsnames.ora" (
copy "%~dp0tnsnames.ora" "%%i\client_1\network\admin\" /Y
)
)
endlocal
到目前为止一切顺利。但该脚本只会创建一次备份文件。
但是每次运行脚本时都必须创建一个新的“ tnsnames-%Date%-Backup-!count!.bak ”。
希望你知道我的意思吗?
我敢肯定,我需要一个跳跃点,但不知道在哪里。
答案 0 :(得分:0)
IMO你做的事情过于复杂。
内部for对于固定位置的文件执行dir是无用的。使用if exists更好地检查。
如果你重命名该文件,那么下一个if也没用,它就不存在 - 你只是重命名它(更好地检查重命名是否成功)
setlocal enabledelayedexpansion
set /a count=0
set OracleDir="%SystemDrive%\oracle\product"
for /d %%i in (%OracleDir%\*) do (
set "dir=%%i\client_1\network\admin\"
PushD "!dir:\\=\!\" || (Echo couldn't pushd "!dir:\\=\!\"&Pause)
Set "Stamp=!Date!.!Time:~,2!.!Time:~2,2!"
if exist tnsnames.ora if not exist "tnsnames-!Stamp!-Backup.bak" (
rename tnsnames.ora "tnsnames-!Stamp!-Backup-!count!.bak"
)
set /a count+=1
if not exist tnsnames.ora copy "%~dp0tnsnames.ora" "!dir!"
PopD
)
endlocal