2015-01-15 2 views
1

Когда я запускаю следующую команду из командной строки, он выполняет отлично: -Команда работает незамедлительным, но не от партии

C:\ouaf\CCB2402\bin>call splenviron -e CCB2402 
Version ................ (OUAFVERSION) : 4.2.0.2.0 
Database Type ............... (OUAFDB) : oracle 
ORACLE_SID ............. (ORACLE_SID) : CCB_DB 

и т.д ...

Но когда я бегу то же самое от пакетный файл, это дает мне ошибку. Содержание пакетного файла: -

cd C:\ouaf\CCB2402\bin 
call splenviron -e CCB2402 

ошибка Дано: -

Error detected while calling splstdinclude.cmd 

содержание splenviron.cmd: -

@echo off 
REM # 
REM #% DocInfo: see the file docinfo.txt for instructions on how 
REM #% DocInfo: to use this file format for self documenting scripts. 
REM # 
REM #% PROGRAM: splenviron.cmd 
REM #% PURPOSE: Initialise environment variables 
REM #% USAGE: splenviron.cmd -e <environment> [-c <command>] [-h] [-q] [-v] 
REM #% USAGE:  -e <environment> 
REM #% USAGE:   environment name in field $1 of /etc/cistab 
REM #% USAGE:   which also has an entry in ENVIRON.INI 
REM #% USAGE:  -c <command> 
REM #% USAGE:   command to run at end of script. Default is ksh 
REM #% USAGE:  -q 
REM #% USAGE:   dont show output from any commands in this script 
REM #% USAGE:   (it will however show output from anything specified by -c 
REM #% USAGE:  -v <verbose> 
REM #% USAGE:  -h 
REM #% USAGE:   help 
REM #% DIST: release 
REM # 
if /I "%SPLDEBUG%" EQU "Y" @echo on 

:START 
    set SCRIPTNAME=%0 
    for /f %%I in ('echo %0') do set SCRIPTDIR=%%~dpI 

    if /I "%1" EQU "" goto USAGE 
    set SPLCOMMAND= 
    set SPLENVIRON= 
    set VERBOSE= 
    set SPLQUITE= 


:GETARG 
    if /I "%1" EQU "" goto NOMOREARGS 
    if /I "%1" EQU "-h" goto USAGE 
    if /I "%1" EQU "-e" if not defined SPLENVIRON set SPLENVIRON=%2 
    if /I "%1" EQU "-c" if not defined SPLCOMMAND set SPLCOMMAND=%2 
    if /I "%1" EQU "-v" if not defined VERBOSE set VERBOSE=Y 
    if /I "%1" EQU "-q" if not defined SPLQUITE set SPLQUITE=Y 
    shift 
    goto GETARG 


:NOMOREARGS 
    if not defined SPLENVIRON goto USAGE 
    if /I "%SPLENVIRON%" EQU "" goto USAGE 


REM # ************************************************************** 
REM # ** 
REM # ** MAIN PART OF SCRIPT FILE 
REM # ** 
REM # ************************************************************** 

:INIT 
    REM --------------------------------------------------- 
    REM Get SPLEBASE from CISTAB file 
    REM --------------------------------------------------- 
    set CISTABFILE=%SYSTEMDRIVE%\spl\etc\cistab 
    if not exist %CISTABFILE% echo Unable to find CISTAB file %CISTABFILE%.&&goto EXITWITHERROR 
    findstr /i /c:"%SPLENVIRON%:" %CISTABFILE% >nul 
    if ERRORLEVEL 1 echo Environment %SPLENVIRON% is not in CISTAB file %CISTABFILE%.&&goto EXITWITHERROR 
    for /f "delims=: tokens=1,2,3,4,5,6" %%i in ('findstr /i /c:"%SPLENVIRON%:" %CISTABFILE%') do set SPLEBASE=%%j:%%k 
    if not defined SPLEBASE echo Unable to set SPLEBASE&&goto EXITWITHERROR 
    if not exist %SPLEBASE% echo SPLEBASE directory %SPLEBASE% does not exist&&goto EXITWITHERROR 

    REM --------------------------------------------------- 
    REM Get SPLOUTPUT from CISTAB file 
    REM --------------------------------------------------- 
    for /f "delims=: tokens=1,2,3,4,5,6" %%i in ('findstr /i /c:"%SPLENVIRON%:" %CISTABFILE%') do set SPLOUTPUT=%%l:%%m 
    if not defined SPLOUTPUT echo Unable to set SPLOUTPUT&&goto EXITWITHERROR 
    if not exist %SPLOUTPUT% echo SPLOUTPUT directory %SPLOUTPUT% does not exist&&goto EXITWITHERROR 
    set SPLAPP=%SPLOUTPUT% 

    REM --------------------------------------------------- 
    REM Set PERLLIB and ANT_HOME 
    REM --------------------------------------------------- 
    REM # Setup Perllib to include OUAF supplied PM modules. 

    set ENVFILE=%SPLEBASE%\etc\ENVIRON.INI 
    for /f "delims== tokens=1,2" %%i in ('type %ENVFILE% ^| findstr /i /c:"ORACLE_CLIENT_HOME="') do set ORACLE_CLIENT_HOME=%%j 
    set PERL_HOME=%ORACLE_CLIENT_HOME%\perl 
    set PERLLIB=%PERL_HOME%\lib;%PERL_HOME%\site\lib;%SPLEBASE%\bin\perllib 
    set PERL5LIB=%PERL_HOME%\lib;%PERL_HOME%\site\lib;%SPLEBASE%\bin\perllib 

    echo %PATH% | findstr /I "%PERL_HOME%\bin" > nul 
    if ERRORLEVEL 1 set PATH=%PERL_HOME%\bin;%PATH% 

:SETANT 
    set ANT_HOME=%SPLEBASE%\product\apache-ant 
    echo %PATH% | findstr /I "%ANT_HOME%\bin" > nul 
    if ERRORLEVEL 1 set PATH=%ANT_HOME%\bin;%PATH% 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k ANT_OPT_MIN') do set ANT_OPT_MIN=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k ANT_OPT_MAX') do set ANT_OPT_MAX=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k ANT_ADDITIONAL_OPT') do set ANT_ADDITIONAL_OPT=%%I 

    set CALC_ANT_OPT_MIN= 
    set CALC_ANT_OPT_MAX= 

    if "%ANT_OPT_MIN%" EQU "0" goto SKIP_ANT_OPT_MIN 
    set CALC_ANT_OPT_MIN=-Xms%ANT_OPT_MIN%M 

:SKIP_ANT_OPT_MIN 
    if "%ANT_OPT_MAX%" EQU "0" goto SKIP_ANT_OPT_MAX 
    set CALC_ANT_OPT_MAX=-Xmx%ANT_OPT_MAX%M 

:SKIP_ANT_OPT_MAX 
    set ANT_OPTS=%CALC_ANT_OPT_MIN% %CALC_ANT_OPT_MAX% %ANT_ADDITIONAL_OPT% 


:SETUPSPLVARS 
    REM --------------------------------------------------- 
    REM Set environment variables 
    REM --------------------------------------------------- 


    echo %PATH% | findstr /I "%SPLEBASE%\bin" > nul 
    if ERRORLEVEL 1 set PATH=%SPLEBASE%\bin;%PATH% 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k FW_VERSION_NUM') do set FW_VERSION_NUM=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k SPLWAS') do set SPLWAS=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k CMPDB') do set CMPDB=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k SPLSYSTEMLOGS') do set SPLSYSTEMLOGS=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k SPLADMIN') do set SPLADMIN=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k SPLADMINGROUP') do set SPLADMINGROUP=%%I 

    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k WEB_SERVER_HOME') do set WL_HOME=%%I 

    set SPLBUILD=%SPLEBASE%\cobol\build 
    set SPLSOURCE=%SPLEBASE%\cobol\source 
    set SPLRUN=%SPLEBASE%\runtime 
    set SPLSYSTEMLOGS=%SPLEBASE%\logs\system 

    echo %PATH% | findstr /I "%SPLRUN%" > nul 
    if ERRORLEVEL 1 set PATH=%SPLRUN%;%PATH% 
    REM 
    REM Setup which compiler is to be used. Only supported option is microfocus 
    set SPLCOMP=microfocus 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k WEB_ISEXPANDED') do set WEB_ISEXPANDED=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k SPLApp') do set SPLApp=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k appViewer') do set appViewer=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k XAIApp') do set XAIApp=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k help') do set help=%%I 

    REM Setup display bill ini file - DOC1 
    set ONLINEBILLINI=%SPLEBASE%\etc\billdirfile.ini 
    set ONLINEDOCINI=%SPLEBASE%\etc\doc1dirfile.ini 

:SETUPWEBAPPSERVER 

    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k JAVA_HOME') do set JAVA_HOME=%%I 
    if not exist %JAVA_HOME%\bin\java.exe echo ERROR - %JAVA_HOME%\bin\java.exe file does not exists. Exiting.&&goto EXITWITHERROR 
    echo %PATH% | findstr /I "%JAVA_HOME%\bin" > nul 
    if ERRORLEVEL 1 set PATH=%JAVA_HOME%\bin;%PATH% 
    if /I "%SPLWAS%" EQU "WLS" goto AFTERSETUPWEBAPPSERVER 
    echo ERROR - Only Weblogic is supported on Windows for OUAF. Exiting.&&goto EXITWITHERROR 

:AFTERSETUPWEBAPPSERVER 

:SETUPDB 
    goto SETUP%CMPDB% 
    echo ERROR - Cannot find DB setup routine. Exiting.&&goto EXITWITHERROR 

:SETUPMSSQL 

    goto AFTERSETUPDB 

:SETUPORACLE 

     REM We will gather the basic Database Home 
     for /f "delims=`" %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k ORACLE_CLIENT_HOME') do set ORACLE_HOME=%%~sI 

    if not defined ORACLE_HOME echo ERROR - environment variable ORACLE_HOME should be set prior to OUAF operation. Exiting.&&goto EXITWITHERROR 
    if not exist %ORACLE_HOME% echo ERROR - ORACLE_HOME %ORACLE_HOME% directory does not exist. Exiting.&&goto EXITWITHERROR 


    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k ORACLE_SID') do set ORACLE_SID=%%I 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k NLS_LANG') do set NLS_LANG=%%I 
    for /f %%I in ('call perl -e"$a=uc \"%NLS_LANG%\";print $a;"') do set NLS_LANG=%%I 

     set NLS_DATE_FORMAT=YYYY-MM-DD 
     set NLS_SORT=BINARY 
    goto AFTERSETUPDB 

:AFTERSETUPDB 

:SETUPCOBOL 

     for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k RJVM') do set RJVM=%%I 
    if /I "%RJVM%" EQU "false" goto AFTERSETUPCOBOL 
    for /f %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k COBMODE') do set COBMODE=%%I 

    REM Set needed variables for COBOL Installations: 
    for /f "delims=`" %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k CHILD_JVM_JAVA_HOME') do set CHILD_JVM_JAVA_HOME=%%~sI 
     for /f "delims=`" %%I in ('call perl %SPLEBASE%\bin\getconfvalue.plx -k COBDIR') do set COBDIR=%%~sI 
    set SPLCOBCPY=%SPLSOURCE%\cm;%SPLEBASE%\services;%SPLSOURCE% 


:SETUPMICROFOCUSNETEXPRESS 

    if not exist "%COBDIR%"\bin\cblrtss.dll goto SETUPMICROFOCUSAPPSERVER 
    echo %PATH% | findstr /I %COBDIR%\bin > nul 
    if ERRORLEVEL 1 set PATH=%COBDIR%\bin;%SPLRUN%;%PATH% 
    goto AFTERSETUPCOBOL 

:SETUPMICROFOCUSAPPSERVER 

    if not exist %COBDIR%\cblrtss.dll echo Unable to find %COBDIR%\bin\cblrtss.dll nor %COBDIR%\cblrtss.dll. Please check your COBOL installation. Exiting.&&goto EXITWITHERROR 
    echo %PATH% | findstr /I %COBDIR% > nul 
    if ERRORLEVEL 1 set PATH=%COBDIR%;%SPLRUN%;%PATH% 
     goto AFTERSETUPCOBOL 

:AFTERSETUPCOBOL 

:CHECKENNVARS 
    REM # Check environment setup and readability of directories. 
    call %SPLEBASE%\bin\splstdinclude.cmd SPLcheckenvvars 
    if ERRORLEVEL 1 echo Error detected while calling splstdinclude.cmd.&&goto EXITWITHERROR 

    if /I "%SPLQUITE%" EQU "Y" goto AFTERQUITE 
    echo Version ................ (OUAFVERSION) : %FW_VERSION_NUM% 
    echo Database Type ............... (OUAFDB) : %CMPDB% 
    if /I "%CMPDB%" EQU "oracle" echo ORACLE_SID ............. (ORACLE_SID) : %ORACLE_SID% 
    if /I "%CMPDB%" EQU "oracle" echo NLS_LANG ................. (NLS_LANG) : %NLS_LANG% 
    echo Environment Name ....... (SPLENVIRON) : %SPLENVIRON% 
    echo Environment Code Directory (SPLEBASE) : %SPLEBASE% 
    echo App Output Dir - Logs ... (SPLOUTPUT) : %SPLOUTPUT% 
    echo Build Directory .......... (SPLBUILD) : %SPLBUILD% 
    echo Runtime Directory .......... (SPLRUN) : %SPLRUN% 
    echo Cobol Copy Path ......... (SPLCOBCPY) : %SPLCOBCPY% 

:AFTERQUITE 

    if /I "%VERBOSE%" NEQ "Y" goto AFTERVERBOSE 
    echo Running on Operating SYSTEM (OS) : %OS% 
    echo Running on command interpreter (COMSPEC) : %COMSPEC% 
    echo Java Version 
    java -version 
    echo Perl Version 
    perl -V 

:AFTERVERBOSE 

    cd /d %SPLEBASE% 
    if not defined CMENV goto AFTERCMENV 
    if exist %CMENV% call %CMENV% 

:AFTERCMENV 

    if exist %SPLEBASE%\scripts\cm\cmenv.cmd call %SPLEBASE%\scripts\cm\cmenv.cmd 
    if /I "%SPLCOMMAND%" NEQ "" call %SPLCOMMAND% 

goto ENDOFBAT 


:USAGE 
    echo USAGE: 
    echo USAGE: %SCRIPTNAME% is the install program for Oracle application installations 
    echo USAGE: 
    echo USAGE: %SCRIPTNAME% -e environment [-c command] [-h] 
    echo USAGE:    -e environment 
    echo USAGE:      environment name in first field of cistab file 
    echo USAGE:      which also has an entry in ENVIRON.INI 
    echo USAGE:    -c command 
    echo USAGE:      command to run at end of script 
    echo USAGE:    -h 
    echo USAGE:      help 
    echo USAGE: 
    goto EXITWITHERROR 

:EXITWITHERROR 
    exit /B 1 
    goto ENDOFBAT 

:ENDOFBAT 

Содержание splstdinclude.cmd

REM # 
REM #% DocInfo: LEAVE THE BELOW TWO LINES IN THE RESULTANTSHELL SCRIPT 
REM #% DocInfo: see the file docinfo.txt for instructions on how 
REM #% DocInfo: to use this file format for self documenting scripts. 
REM # 
REM #%  PROGRAM: splstdinclude.cmd 
REM #%  PURPOSE: Common functions used in most SPL scripts 
REM #% DESCRIPTION: Common functions used in most SPL scripts 
REM #%  USAGE: call splstdinclude.cmd arg where arg1 is the function name 
REM #%  USAGE: additional args can be passed to the function using 
REM #%  USAGE: arg1, arg2, ... , arg5 
REM #%  DIST: release 
REM #% MODHISTORY: 000101:DC:Created 
REM #% MODHISTORY: 00 
REM # 
REM # 
REM #--------------------------------------------------------------------------- 
REM # 

:START 
if /I "%1" EQU "" echo Function name not provided.&&goto EXITWITHERROR 
set FUNCTIONNAME=%1 
for /f "delims=~" %%I in ('echo %2') do set PARM1=%%~I 
for /f "delims=~" %%I in ('echo %3') do set PARM2=%%~I 
for /f "delims=~" %%I in ('echo %4') do set PARM3=%%~I 
for /f "delims=~" %%I in ('echo %5') do set PARM4=%%~I 
for /f "delims=~" %%I in ('echo %6') do set PARM5=%%~I 
goto %FUNCTIONNAME% 

REM #--------------------------------------------------------------------------- 
REM # start of this function 
REM #--------------------------------------------------------------------------- 
:SPLCHECKENVVARS 

    REM # The Following Variables are required to be set before splenviron.sh is even started. 
    if not defined SPLOUTPUT echo Environment variable SPLOUTPUT is not defined.&&goto EXITWITHERROR 
    if not exist %SPLOUTPUT% echo Unable to find directory %SPLOUTPUT%.&&goto EXITWITHERROR 
    if not defined JAVA_HOME echo Environment variable JAVA_HOME is not defined.&&goto EXITWITHERROR 
    if not defined SPLENVIRON echo Environment variable SPLENVIRON is not defined.&&goto EXITWITHERROR 
    if not defined SPLEBASE echo Environment variable SPLEBASE is not defined.&&goto EXITWITHERROR 
    if not exist %SPLEBASE%\bin echo Unable to find directory %SPLEBASE%\bin.&&goto EXITWITHERROR 
    for /f %%I in ('call perl -e"$a=lc "%CMPDB%";print $a;"') do set CMPDB=%%I 
    if not defined SPLCOMPLOG goto AFTERSPLCHECKENVVARS 
:AFTERSPLCHECKENVVARS 
    goto ENDOFBAT 
REM #--------------------------------------------------------------------------- 
REM # end of this function 
REM #--------------------------------------------------------------------------- 

REM #--------------------------------------------------------------------------- 
REM # start of this function 
REM #--------------------------------------------------------------------------- 
:LOG 

    REM # The Following Variables are required to be set before splenviron.sh is even started. 
    if not defined SPLCOMPLOG echo Environment variable SPLCOMPLOG is not defined.&&goto EXITWITHERROR 
    if not defined PARM1 set PARM1= 
    if /I "%PARM2%" EQU "-q" call perl -e"use SPL::splLog;my $log=SPL::splLog->new($ENV{'SPLCOMPLOG'});$log->info('-q', '%PARM1%');" 
    if /I "%PARM2%" NEQ "-q" call perl -e"use SPL::splLog;my $log=SPL::splLog->new($ENV{'SPLCOMPLOG'});$log->info('%PARM1%');" 

:AFTERLOG 
    goto ENDOFBAT 
REM #--------------------------------------------------------------------------- 
REM # end of this function 
REM #--------------------------------------------------------------------------- 

:EXITWITHERROR 
    exit /B 1 

:ENDOFBAT 

Это ems, что программа выйдет после установки уровня ошибки в 1. Может ли кто-нибудь помочь мне с этим, пожалуйста?

+0

Попробуйте 'C:' 'следуют кд \ ouaf \ CCB2402 \ bin' следуют' называют splenviron -e CCB2402' –

+0

или использование " cd' с переключателем '/ d':' cd/d C: \ ouaf \ CCB2402 \ bin' Или использовать 'pushd' вместо' cd' – Stephan

+0

Ребята Я не думаю, что ошибка исходит из-за команды cd. Я попробовал ваши предложения, но получил ту же ошибку. Ошибка может быть из-за выполнения вышеприведенных скриптов, которые я сейчас вставил. Я смотрел на него с разных точек зрения, но не мог понять, где я ошибаюсь. Пожалуйста, помогите .. Спасибо –

ответ

0

Причина - расширение вашей партии!

От Difference .bat vs .cmd

.cmd позволяет встроенные команды для изменения Errorlevel 0 на успех.

Когда вы вызываете свой .cmd напрямую, это работает, поэтому уровень ошибок будет сброшен до 0 после команды set CMPDB=%%I.

Но когда вы вызываете его из .bat-файла, он больше не сбрасывается, даже если код все еще включен в .cmd-файл, он выполняется с использованием логики .bat.

Таким образом, решение должно быть переименовать .bat также .cmd

+0

Спасибо тонну! Это сработало.. –

0

OK, потенциальная причина: splstdinclude.cmd не может изменять уровень ошибок вообще. Последнее, что делалось в splenviron.cmd перед вызовом splstdinclude.cmd, заключается в настройке пути, если findstr установил уровень ошибок.

Я предполагаю, что в командной строке, с которой вы запускаете, есть COBDIR в пути, но двойного щелчка на файле bat нет.

Вы можете проверить это, добавив echo %errorlevel% с каждой стороны вашей команды call %SPLEBASE%\bin\splstdinclude.cmd SPLcheckenvvars.

Смежные вопросы