2012-03-13 21 views
0

今は2つのバッチファイルを使用していますが、この例ではvariables.cmdとmain.cmdと呼んでいます。 variable.cmdファイルは、複数の他のバッチファイルで使用される変数のセットを外部化するために使用されます。外部バッチファイルの変数がメインバッチファイル内で機能しない

すべての変数は、CLASSPATH以外のmain.cmdファイルではアクセスできません。エコーはvariables.cmd内で呼び出された場合CLASSPATHが正しく作成されていますが、main.cmdファイルにエコーとき、私は次のような結果を得る:起こって、どのようにそれを解決することができますいただきました!上の

!CLASSPATH!;C:\ipp\deploy\lib\app\momex-webservice-client.jar;C:\ipp\deploy\resources 

任意のアイデア?

これはmain.cmdファイルです:あなたvariables.cmdの上部にSETLOCALは、特にその中で定義された変数を起こし

@echo off 
setlocal EnableDelayedExpansion 

set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_30" 
set DEPLOY=C:\ipp\deploy 
set DEBUG=false 
set DEBUG_PORT=15000 

set JAVA_OPTIONS=" 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Djava.endorsed.dirs=%DEPLOY%\lib\endorsed 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump="true" 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dconfiguration.properties=%DEPLOY%\resources\vendor.configuration.properties 
if "%DEBUG%"=="true" (
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=15000,suspend=n,server=y 
) 

set CLASSPATH=%DEPLOY% 
for %%i in (%DEPLOY%\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

for %%i in (%DEPLOY%\lib\system\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

for %%i in (%DEPLOY%\lib\app\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

for %%i in (%DEPLOY%\tools\jaxws-ri\lib\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

set CLASSPATH=%CLASSPATH%;%DEPLOY%\resources 

答えて

1
--main.bat-- 
@echo in main.bat 
@set CLASSPATH="This is a failed test" 
@echo The current classpath is %CLASSPATH% 
@echo going to call variables.bat 
@call variables.bat 
@call temporary.bat 
@echo back in main.bat 
@echo The current classpath is %CLASSPATH% 
@echo main.bat -- all done 

--variables.bat-- 
@setlocal EnableDelayedExpansion 
@echo In variables.bat 
@set something="This is a successfull test" 
@echo set classpath=!something! > temporary.bat 
@endlocal 
@echo variables.bat is finished 
+0

私はちょうど試してみました。よく働く!助けてくれてありがとう。 – Karl

0

:これはvariables.cmdファイルです

@echo off 

call variables.cmd 

echo %JAVA_HOME% 
echo %DEPLOY% 
echo %DEBUG% 
echo %DEBUG_PORT% 
echo %JAVA_OPTIONS% 
echo %CLASSPATH% 

「ローカル」であるため、main.cmdの「範囲内」ではない

+0

ありがとうございます。それは理にかなっていますが、forループを!CLASSPATHで使用する方法を教えてください。 setLocal EnableDelayedExpansionを使用せずに? endLocalを呼び出すと、CLASSPATHはsetLocalが使用される前の状態に戻ります。 – Karl

+0

はい、確かに私が考えることができるcatch-22は、あなたの "variables.cmd"ファイルに、完全に展開されたクラスパス設定を含む一時的な ".cmd"または ".bat" - 次に "main.cmd"を "variables.cmd"と "temporary.cmd"を最初に呼び出すように変更します。作成する一時ファイルには "setLocal"が含まれず、環境への変更は"メイン" - 幸運! –

+0

もうひとつ試してみるべきことは、variables.cmdファイルの "endlocal"を使用することです - 理論的には、最終的なステートメントを "main"に反映させる必要があります。 –

1

これは変更されたvar iabled.cmdファイル:

@echo off 

set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_30" 
set DEPLOY=C:\ipp\deploy 
set DEBUG=false 
set DEBUG_PORT=15000 

set JAVA_OPTIONS=" 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Djava.endorsed.dirs=%DEPLOY%\lib\endorsed 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump="true" 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dconfiguration.properties=%DEPLOY%\resources\vendor.configuration.properties 
if "%DEBUG%"=="true" (
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=15000,suspend=n,server=y 
) 

set CLASSPATH=%DEPLOY% 

setlocal EnableDelayedExpansion 

for %%i in (%DEPLOY%\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

for %%i in (%DEPLOY%\lib\system\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

for %%i in (%DEPLOY%\lib\app\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

for %%i in (%DEPLOY%\tools\jaxws-ri\lib\*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%i 
) 

endlocal & set CLASSPATH=%CLASSPATH%;%DEPLOY%\resources 

変更のみがsetlocalコマンドの位置とCLASSPATH変数の最後のセットの同じ行endlocalです。この方法では、このバッチファイルで設定された値はmain.batファイルのまま残り、必要に応じて遅延拡張が有効になります。

関連する問題