我有一个用于设置环境变量的批处理文件,如下所示
@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中的类路径和路径设置未正确设置。任何帮助解决这个问题都将不胜感激。
答案 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的答案效果更好。