rem Cognos8.4 模型刷新脚本
@echo off
set "ymd=%date:~,4%%date:~5,2%%date:~8,2%"
::Cognos执行文件bin目录
set Cogtrbin=d:\Program Files\cognos\c8\bin
::数据源名称(iqd关联,参考cs7g.ini)
set DataSourceName=xxx
::用户名
set UserName=xxx
::密码
set UserPwd=xxx
::TnsName
set TnsName=xxx
::模型基础目录
set BaseDirectory=xxx
::cube输出第三方目录
set CubeOutputDirectory=xxx
::mdl存放目录
set MdlFileDirectory=%BaseDirectory%\mdl
::模型备份目录
set CubeBakDirectory=%BaseDirectory%\cubebak\%ymd%
::调度脚本存放目录
set ScheduleDirectory=%BaseDirectory%\schedule
::刷新日志存放目录
set LogFileDirectory=%BaseDirectory%\cubelog\%ymd%
::iqd数据源路径(Linux上有效,当处理路径配置成"On the server"时,将根据参数找寻)
::set DataSourceDirectory=%BaseDirectory%\iqd
::cube生成目录
set CubeSaveDirectory=%BaseDirectory%\cubes
::访问数据库确定刷新状态就绪
for /F "usebackq" %%i in (`echo select count^(^*^) from mn_process where stat_date^=^trunc^(^sysdate^)^ and action_en^=^'CREATE_REPORT'^;^| sqlplus -s %UserName%/%UserPwd%@%TnsName%`) DO set rptnum=%%i
if not exist "%LogFileDirectory%" if %rptnum% == 10 (
::删除用户读cube报表的进程锁
taskkill /f /im BIBusTKServerMain.exe
::备份mdc
echo n|xcopy /d "%CubeSaveDirectory%"\*.mdc "%CubeBakDirectory%"\
::刷新cube
cd "%ScheduleDirectory%"
start refreshforpboc.bat "%Cogtrbin%" %DataSourceName% %UserName% %UserPwd% "%MdlFileDirectory%" "%CubeSaveDirectory%" "%CubeOutputDirectory%"
start refreshforcomm.bat "%Cogtrbin%" %DataSourceName% %UserName% %UserPwd% "%MdlFileDirectory%" "%CubeSaveDirectory%" "%CubeOutputDirectory%"
)
exit
"refreshforcomm.bat"脚本:(执行模型刷新,生成cube)
::刷新金融机构立方体
@echo off
set Cogtrbin=%1
set DataSourceName=%2
set UserName=%3
set UserPwd=%4
set MdlFileDirectory=%5
set CubeSaveDirectory=%6
::去掉引号
set MdlFileDirectory=%MdlFileDirectory:~1,-1%
set CubeSaveDirectory=%CubeSaveDirectory:~1,-1%
set CubeOutputDirectory=%7
set MMDD=%date:~5,2%%date:~8,2%
set Week=%date:~-1%
set DD=%date:~8,2%
cd %Cogtrbin%
::日处理
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx\mdl\xxxxxx.mdl"
::优化生成的mdc
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx.mdc"
::复制cube到第三方目录
xcopy /y "%CubeSaveDirectory%\xxxxxx.mdc" %CubeOutputDirectory%
::周处理
if %Week%==一 (
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx_w\mdl\xxxxxx_w.mdl"
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx_w.mdc"
xcopy /y "%CubeSaveDirectory%\xxxxxx_w.mdc" %CubeOutputDirectory%
)
::月处理
if %DD%==01 (
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx_m\mdl\xxxxxx_m.mdl"
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx_m.mdc"
xcopy /y "%CubeSaveDirectory%\xxxxxx_m.mdc" %CubeOutputDirectory%
)
::年处理
if %MMDD%==0101 (
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx_y\mdl\xxxxxx_y.mdl"
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx_y.mdc"
xcopy /y "%CubeSaveDirectory%\xxxxxx_y.mdc" %CubeOutputDirectory%
)
exit
另一方面因为windows上模型文件里的cube输出目录以及iqd数据源目录无法像Linux一样配置成"On the server";因此需要根据报表实际的解压位置进行重设定;
在配置完"refreshCube.bat"后,执行“confgOtpath.bat”脚本:
rem 配置模型输出路径
@echo off
setlocal enabledelayedexpansion
::替换目标
set r_source=d:\transformer
::替换结果
::在refreshCube.bat里查找配置值[BaseDirectory=]
for /f "tokens=2* delims=^=^" %%i in ('findstr /I /R /C:"set *BaseDirectory" "refreshCube.bat"') do set r_target=%%i
::枚举所有替换文件
for /r ..\mdl\ %%i in (*.mdl) do (
::完全路径文件名
set file=%%~fi
::文件名不带后缀
set filename=%%~ni
::完全路径
set filepath=%%~dpi
call :fileReplace "!file!" "!filename!" "!filepath!"
)
exit
:fileReplace
set file=%1
set filename=%2
set filepath=%3
::去掉引号
set filename=%filename:~1,-1%
set filepath=%filepath:~1,-1%
for /f "tokens=1* delims=:" %%i in ('findstr /n .* !file!') do (
::得到文本内容
set f_content=%%j
::替换文本内容
if not "!f_content!"=="" set "f_content=!f_content:%r_source%=%r_target%!"
::将替换后的内容保存到临时文件
>> "!filepath!!filename!_tmp" (echo+!f_content!)
)
::将临时文件替换源文件
move "!filepath!!filename!_tmp" !file!