首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理文件和等待- MAXL

批处理文件和等待- MAXL
EN

Stack Overflow用户
提问于 2020-02-01 04:35:46
回答 1查看 559关注 0票数 0

由于某些原因,让这个批处理直到批处理结束时才运行MAXL。我尝试在过程开始时输出一个日志文件,运行MAXL,然后告诉我文件什么时候结束。

代码语言:javascript
复制
REM Variables 1-9 assigned SET $1=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 %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
    ECHO ENDING REBUILD
EXIT /B

:EOF

我看到的是脚本遍历Subs -C,然后执行MAXL。我期望Sub A执行,Sub B执行--启动MAXL,然后运行SUB_C。

我做错了什么?我加入了/W来等待,加入/B来在当前窗口中运行文件,这样我就不需要干预了

如果我用START "REBUILD“/W CMD /c运行它,也许效果会更好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 03:17:50

解决了这个问题。有两个问题,1)当批处理完成时,MAXL.bat终止当前进程-这需要一个新的终端窗口来打开2)我的密码有一个保留字符,这让我抓狂。回显它会有所帮助,但有时需要在传递给maxl时将变量括在"“中

StartMAXL.bat用于Oracle Essbase数据加载/重建/等。.bat通常向下7个文件夹。

要运行MAXL,需要列出StartMAXL.bat的完整路径,然后在.msh文件中传递一个命令列表,后跟变量/参数。

将此文件另存为Essbase_Rebuild.cmd文件这是基本的MAXL命令行调用

代码语言:javascript
复制
SET $1=[Essbase Username]
SET $2=[Essbase Password]
SET $3=localhost REM /*This is performed on the essbase server*/
SET $4=[Target Application Name]
SET $5=[Target App Cube Name]
SET $6=[source app]
SET $7=[source cube]
SET $8=[SQL Username]
SET "$9=[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 %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%

现在,查看您正在执行的Essbase_Code_File.msh文件/或列表

代码语言:javascript
复制
login $1 identified by $2 on $3;
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

代码语言:javascript
复制
REM Parameters
SET $1=[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 %$1% %$2% %$3% %$4% %$5% %$6% %$7% %$8% %$9%
EXIT /B

:SUB_C
ECHO Ending the Rebuild - Ending @ %time% on %date% >D:\Logs\Rebuild_End.log
EXIT /B

:EOF

我喜欢这种方法,因为命令提示符不会被重命名-有开始/结束时间的日志记录,重建发生在一个新的窗口中,然后在完成时关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60010887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档