通过bat文件设置环境变量来执行java程序的问题

时间:2014-03-31 23:40:34

标签: java batch-file

我有一个用于设置环境变量的批处理文件,如下所示

 @echo off

echo -- Setting Environment variables --
set "TH=D:\apache-tomcat-7.0.37\";
set "WEB-INF=%TH%webapps\ROOT\WEB-INF";
set "CLASSES_HOME=%WEB-INF%\classes";
set "CONFIG=%WEB-INF%\config-files";
set "JARS=%TH%webapps\ROOT\WEB-INF\lib";
set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45";
set "_JAVA_OPTIONS=-Djava.net.preferIPv4Stack=true";
set "path=%path%;%JAVA_HOME%\bin;%WEB-INF%;%JARS%\jacob";

 setLocal EnableDelayedExpansion
 set "CLASSPATH=.;C:\WINNT\system32;%CLASSES_HOME%;%CONFIG%";
 for %%a in ("%TH%lib\*.jar") do (
   set CLASSPATH=!CLASSPATH!;%%a
 )

 for %%a in ("%CONFIG%\*.lic") do (
   set CLASSPATH=!CLASSPATH!;%%a
 )

  for %%a in ("%JARS%\*.jar") do (
   set CLASSPATH=!CLASSPATH!;%%a
 )

set CLASSPATH=!CLASSPATH!

echo %CLASSPATH%
echo %path%

现在我有第二个批处理文件,它调用第一个批处理文件来设置环境变量,然后调用java类,如下所示

call D:\myFolder\setEnvironmentvaribales.bat
java -Xms256m -Xmx1024m com.myproject.java.runBatchToDelete

这引发了一个异常,指出无法找到main方法。我知道java类没有问题因为我可以直接运行这个程序。我相信由于某种原因,setEnvironmentvaribales.bat中的类路径和路径设置未正确设置。任何帮助解决这个问题都将不胜感激。

2 个答案:

答案 0 :(得分:2)

更改此行:

set CLASSPATH=!CLASSPATH!

这一个:

endlocal & set CLASSPATH=%CLASSPATH%

答案 1 :(得分:1)

我一直在尝试这个,由于某种原因,似乎EnableDelayedExpansion会以某种方式干扰设置环境变量的能力,然后在批处理文件完成后可以看到这些变量。您的批处理文件显示echo %CLASSPATH%。尝试将echo %CLASSPATH%放在第二个批处理文件中的call之后。如果输出不同,您可能会遇到我遇到的同样问题。

我唯一可以开始工作的地方:在setEnvironmentVariables.bat(或setEnvironmentVaribales.bat)结束时,添加

echo set CLASSPATH=%CLASSPATH% > sometemporary.bat

然后,在第二个批处理文件中,在call之后,

call sometemporary.bat

这似乎有效。您应该添加一个命令来删除临时文件。

P.S。走向终点

set CLASSPATH=!CLASSPATH!

可能是多余的。看起来您可能正在尝试找到一种方法来获取其他脚本使用的变量集,但它似乎无法正常工作。

PPS。好的,Aacini的答案效果更好。