Batch file 批处理文件和等待-MAXL

Batch file 批处理文件和等待-MAXL,batch-file,cmd,subroutine,Batch File,Cmd,Subroutine,由于某些原因,此批处理在批处理结束之前不会运行MAXL。我正在尝试在程序开始时输出一个日志文件,运行MAXL,然后告诉我文件何时完成 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:\Log

由于某些原因,此批处理在批处理结束之前不会运行MAXL。我正在尝试在程序开始时输出一个日志文件,运行MAXL,然后告诉我文件何时完成

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 A-C,然后执行MAXL。我希望Sub A执行,Sub B执行-启动MAXL,然后运行Sub_C

我做错了什么? 我包括/W等待,/B在当前窗口中运行文件,因此我不必干预


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

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

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

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

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

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文件或正在执行的Essbase操作列表

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

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

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

使用关键字
call
调用“startMaxl.bat”,而不是
start
。如果要在标题栏运行时将其设置为“重建”,请使用
title
命令。。然后将其设置回您喜欢的任何设置(通常为%COMSPEC%或“命令提示符”)。如果使用
调用
startMAXL.bat将不会运行。变量$9有一个%符号,如果我使用call@Señ或CMasMas,它会被删除。我真不敢相信我错过了这个符号!我猜滚动条是你的朋友$x是linux/bash语法。cmd.exe不理解它。对于cmd.exe,您的参数用一个“%”引用。。像这样%1%2%3,而不是%$1%。。