批处理文件并等待 - MAXL
Batch File and Wait - MAXL
这批由于某种原因直到批结束时才运行达到 MAXL。我试图在程序开始时输出一个日志文件,运行 MAXL,然后在文件完成时告诉我。
REM Variables 1-9 assigned SET =variable1
CALL :SUB_A
CALL :SUB_B
CALL :SUB_C
GOTO :EOF
:SUB_A
ECHO STARTING Rebuild_TEST - Started at %time% on %date% > D:\Logs\Rebuild_TEST_Start.log
EXIT /B
:SUB_C
ECHO ENDING Rebuild_TEST - Started at %time% on %date% > D:\Logs\Rebuild_TEST_END.log
EXIT /B
:SUB_B
ECHO STARTING REBUILD
START "REBUILD" /W /B D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_TEST.msh %% %% %% %% %% %% %% %% %%
ECHO ENDING REBUILD
EXIT /B
:EOF
我看到的是脚本通过 Subs A-C 然后执行 MAXL。我期待子 A 执行,子 B 执行 - 启动 MAXL,然后 运行 SUB_C。
我做错了什么?
我包括 /W 等待,/B 到 运行 当前 window 中的文件,所以我不必干预
如果我 运行 使用 START "REBUILD" /W CMD /c 可能效果会更好?
想通了这一点。有两个问题,1) MAXL.bat 在批处理完成时终止当前进程 - 这需要一个新终端 window 才能打开 2) 我的密码有一个保留字符,这让我发疯。回应它会有所帮助,但有时您需要在传递给 maxl
时将变量包含在 "" 中
StartMAXL.bat 用于 Oracle Essbase 数据 loads/rebuilds/etc。 .bat 通常在 7 个文件夹下。
到 运行 MAXL,您列出了 StartMAXL.bat 的完整路径,然后在 .msh 文件中传递命令列表,后跟 variables/parameters。
将其另存为 Essbase_Rebuild.cmd 文件
这是基本的 MAXL Cmd 行调用
SET =[Essbase Username]
SET =[Essbase Password]
SET =localhost REM /*This is performed on the essbase server*/
SET =[Target Application Name]
SET =[Target App Cube Name]
SET =[source app]
SET =[source cube]
SET =[SQL Username]
SET "=[SQL password]" REM if you have special characters they might error in MAXL
D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Essbase_Code_File.msh %% %% %% %% %% %% %% %% %%
现在列出您正在做的 Essbase_Code_File.msh file/or Essbase 事情
login identified by on ;
spool on to 'D:\Logs\Essbase_Code_File.log';
/* do your MAXL commands */
spool off;
logout;
exit;
上述方法适用于简单方法 - 有时您可能需要将 %9% 变量包含在“%9%”中,以便 MAXL 正确解释变量。通过添加 shell echo "$1"; 在 .msh 中回显您的变量以在命令提示符中查看它登录前添加到您的 .msh。
花了3个月搞定的更优雅的版本
将其命名为 Essbase_Code_File.cmd
REM Parameters
SET =[Essbase Username]
-- repeat for your variables
CALL :SUB_A
CALL :SUB_B
CALL :SUB_C
GOTO :EOF
:SUB_A
ECHO Starting the Rebuild - Started @ %time% on %date% >D:\Logs\Rebuild_Start.log
EXIT /B
:SUB_B
ECHO STARTING REBUILD
START "ESSBASE_EXAMPLE" /W CMD /C D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Essbase_Code_File.msh %% %% %% %% %% %% %% %% %%
EXIT /B
:SUB_C
ECHO Ending the Rebuild - Ending @ %time% on %date% >D:\Logs\Rebuild_End.log
EXIT /B
:EOF
我喜欢这种方法,因为命令提示符不会重命名 - 记录 start/end 时间,重建发生在新的 window 中,完成后关闭,
这批由于某种原因直到批结束时才运行达到 MAXL。我试图在程序开始时输出一个日志文件,运行 MAXL,然后在文件完成时告诉我。
REM Variables 1-9 assigned SET =variable1
CALL :SUB_A
CALL :SUB_B
CALL :SUB_C
GOTO :EOF
:SUB_A
ECHO STARTING Rebuild_TEST - Started at %time% on %date% > D:\Logs\Rebuild_TEST_Start.log
EXIT /B
:SUB_C
ECHO ENDING Rebuild_TEST - Started at %time% on %date% > D:\Logs\Rebuild_TEST_END.log
EXIT /B
:SUB_B
ECHO STARTING REBUILD
START "REBUILD" /W /B D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Rebuild_TEST.msh %% %% %% %% %% %% %% %% %%
ECHO ENDING REBUILD
EXIT /B
:EOF
我看到的是脚本通过 Subs A-C 然后执行 MAXL。我期待子 A 执行,子 B 执行 - 启动 MAXL,然后 运行 SUB_C。
我做错了什么? 我包括 /W 等待,/B 到 运行 当前 window 中的文件,所以我不必干预
如果我 运行 使用 START "REBUILD" /W CMD /c 可能效果会更好?
想通了这一点。有两个问题,1) MAXL.bat 在批处理完成时终止当前进程 - 这需要一个新终端 window 才能打开 2) 我的密码有一个保留字符,这让我发疯。回应它会有所帮助,但有时您需要在传递给 maxl
时将变量包含在 "" 中StartMAXL.bat 用于 Oracle Essbase 数据 loads/rebuilds/etc。 .bat 通常在 7 个文件夹下。
到 运行 MAXL,您列出了 StartMAXL.bat 的完整路径,然后在 .msh 文件中传递命令列表,后跟 variables/parameters。
将其另存为 Essbase_Rebuild.cmd 文件 这是基本的 MAXL Cmd 行调用
SET =[Essbase Username]
SET =[Essbase Password]
SET =localhost REM /*This is performed on the essbase server*/
SET =[Target Application Name]
SET =[Target App Cube Name]
SET =[source app]
SET =[source cube]
SET =[SQL Username]
SET "=[SQL password]" REM if you have special characters they might error in MAXL
D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Essbase_Code_File.msh %% %% %% %% %% %% %% %% %%
现在列出您正在做的 Essbase_Code_File.msh file/or Essbase 事情
login identified by on ;
spool on to 'D:\Logs\Essbase_Code_File.log';
/* do your MAXL commands */
spool off;
logout;
exit;
上述方法适用于简单方法 - 有时您可能需要将 %9% 变量包含在“%9%”中,以便 MAXL 正确解释变量。通过添加 shell echo "$1"; 在 .msh 中回显您的变量以在命令提示符中查看它登录前添加到您的 .msh。
花了3个月搞定的更优雅的版本 将其命名为 Essbase_Code_File.cmd
REM Parameters
SET =[Essbase Username]
-- repeat for your variables
CALL :SUB_A
CALL :SUB_B
CALL :SUB_C
GOTO :EOF
:SUB_A
ECHO Starting the Rebuild - Started @ %time% on %date% >D:\Logs\Rebuild_Start.log
EXIT /B
:SUB_B
ECHO STARTING REBUILD
START "ESSBASE_EXAMPLE" /W CMD /C D:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\startMaxl.bat Essbase_Code_File.msh %% %% %% %% %% %% %% %% %%
EXIT /B
:SUB_C
ECHO Ending the Rebuild - Ending @ %time% on %date% >D:\Logs\Rebuild_End.log
EXIT /B
:EOF
我喜欢这种方法,因为命令提示符不会重命名 - 记录 start/end 时间,重建发生在新的 window 中,完成后关闭,