Java 如何从任何文件夹运行批处理文件

Java 如何从任何文件夹运行批处理文件,java,batch-file,Java,Batch File,我需要从任何目录运行批处理文件。我已经为java设置了路径。有人能帮我吗?您的消息有点乱七八糟,我想您是说java正在运行,但您无法从批处理文件正确运行应用程序。看起来您缺少java的类路径选项(-cp)。试试这个: 使用%cd%获取当前目录(即批处理文件所在的目录) e、 g cd ../../jobs set CLASSPATH=.;../xyz.jar;../mysql-connector-java-5.1.6-bin.jar java -cp %CLASSPATH% folser.fo

我需要从任何目录运行批处理文件。我已经为java设置了路径。有人能帮我吗?

您的消息有点乱七八糟,我想您是说java正在运行,但您无法从批处理文件正确运行应用程序。看起来您缺少java的类路径选项(-cp)。试试这个:


使用%cd%获取当前目录(即批处理文件所在的目录)

e、 g

cd ../../jobs
set CLASSPATH=.;../xyz.jar;../mysql-connector-java-5.1.6-bin.jar
java -cp %CLASSPATH% folser.folder1 ../Files/MySQL.xml
cd ..

在*nix下(例如Linux):

在Windows NT/XP/etc下:

cd "`dirname \"$0\"`"
# your current directoy is now the script's directory
cd ../../jobs
set CLASSPATH=.:../xyz.jar:../mysql-connector-java-5.1.6-bin.jar
java folder.folder1 ../Files/MySQL.xml
cd ..
# when the script terminates, you are automatically
#  back to the original directory

虽然我不能对Vlad的答案发表评论(评论需要比答案更多的分数?!),但我始终对依赖以下方面保持谨慎:

SETLOCAL
PUSHD .
REM current directory has been saved and environment is protected
CD /d %~dp0
REM your current directoy is now the script's directory
CD ..\..\jobs
SET CLASSPATH=.;..\xyz.jar;..\mysql-connector-java-5.1.6-bin.jar
java folder.folder1 ..\Files\MySQL.xml
CD ..
REM before the script terminates, you must explicitly
REM return back to the original directory
POPD
ENDLOCAL
因为Windows无法CD到UNC路径,并且有一个很坏的习惯,就是将您放入%windir%,而这可能会带来灾难性的结果

相反,尽管它更冗长,但每次需要完整路径时,通常最好引用%dp0(或包含该值的变量)

坏的:

好:


这并没有回答海报的问题您是否需要“-cp”?我认为Java是从类路径自动获取的(尽管您可能需要导出而不是设置)。%cd%不是批处理文件的目录,而是当前目录,例如,我在C:\,我调用C:\test\batch.bat;%cd%是C:\,不是C:\test。@Richard-%~dp0将获取批处理文件目录这是Windows还是Linux?您在cd命令中使用“/”表示Linux,但您谈论的是批处理文件,而不是shell脚本。我认为,对于Windows版本,您最终不会回到原始目录。您应该使用setlocal/endlocal来确保环境更改不会泄漏到脚本中-您可能还需要存储当前路径,并在完成时驱动和还原。和+1。喂,喂我!我甚至不知道pushd/popd,我一直在把我的PWD保存在一个环境变量中。下次签出时必须记住更改该代码。
cd "`dirname \"$0\"`"
# your current directoy is now the script's directory
cd ../../jobs
set CLASSPATH=.:../xyz.jar:../mysql-connector-java-5.1.6-bin.jar
java folder.folder1 ../Files/MySQL.xml
cd ..
# when the script terminates, you are automatically
#  back to the original directory
SETLOCAL
PUSHD .
REM current directory has been saved and environment is protected
CD /d %~dp0
REM your current directoy is now the script's directory
CD ..\..\jobs
SET CLASSPATH=.;..\xyz.jar;..\mysql-connector-java-5.1.6-bin.jar
java folder.folder1 ..\Files\MySQL.xml
CD ..
REM before the script terminates, you must explicitly
REM return back to the original directory
POPD
ENDLOCAL
CD /d %~dp0
cd /d %~dp0
rd temp
rd %~dp0\temp