Переменная из внешнего Batch-файла не работает в основном Batch-файле - PullRequest
0 голосов
/ 13 марта 2012

Прямо сейчас я использую два пакетных файла, хорошо называйте их variables.cmd и main.cmd для этого примера. Файл variable.cmd должен использоваться для вывода набора переменных, которые могут использоваться с несколькими другими пакетными файлами.

Теперь у каждой переменной нет проблем с доступом в файле main.cmd, кроме CLASSPATH. Когда echo вызывается в variables.cmd, CLASSPATH создается правильно, но при отражении в файле main.cmd я получаю следующий результат:

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

Есть идеи о том, что происходит и как это можно решить?

Это файл main.cmd:

@echo off

call variables.cmd

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

Это файл variables.cmd:

@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

Ответы [ 3 ]

1 голос
/ 13 марта 2012
--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
1 голос
/ 14 марта 2012

Это измененный файл variabled.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 и endlocal в той же строке последнейнабор переменных CLASSPATH.Таким образом, значения, заданные в этом пакетном файле, остаются для файла main.bat, и при необходимости включается расширение с задержкой.

0 голосов
/ 13 марта 2012

setlocal в верхней части ваших переменных. Cmd определенно определяет переменные, определенные в нем, как "локальные" - и, следовательно, не "в области видимости" для main.cmd

...