Пакетный файл и ожидание - MAXL - PullRequest
0 голосов
/ 31 января 2020

Имейте эту партию, которая по какой-то причине не запускает 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 Ответ

0 голосов
/ 06 февраля 2020

понял это. Было две проблемы: 1) MAXL.bat завершает текущий процесс по завершении пакета - для этого требуется открыть новое окно терминала 2) У моего пароля был зарезервированный символ, который сводил меня с ума. Повторение помогает, но иногда вам нужно заключать переменную в "" при передаче в maxl

. StartMAXL.bat используется для Oracle загрузки / перекомпоновки данных Essbase / et c. .Bat обычно на 7 папок вниз.

Чтобы запустить MAXL, вы указываете полный путь к StartMAXL.bat, а затем передаете список команд в файле .m sh, за которым следуют переменные / параметры.

Сохраните это как файл Essbase_Rebuild.cmd. Это базовый c вызов линии 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.m sh или списка вещей 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 правильно интерпретировал переменную. Выведите вашу переменную в .m sh, чтобы просмотреть ее в командной строке, добавив shell echo "$ 1"; на ваш .m sh до входа в систему.

Более элегантная версия, для выяснения которой потребовалось 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

Мне нравится этот метод, потому что командная строка не переименовывается - есть запись для запуска / время окончания, перестроение происходит в новом окне и затем закрывается, когда закончится,

...