我有一个包含很少jar文件的文件夹。我指的是来自另一个jar文件的jar文件,这些文件位于其他位置。
我的问题是,当我给出像C:\Trial Library\jar Folder\
这样的jar文件夹的路径时。如果文件夹名称中包含空格(试用库),则无法找到此文件夹。
如果我没有空间即C:\Trial_Library\jar_Folder\
,那么它可以正常工作。
请尽快帮我解决这个问题。
这是我的批处理文件
set CURRENT_DIRECTORY=%~dp0
set ANT_HOME=%"CURRENT_DIRECTORY"%ant\apache-ant-1.8.3
ECHO current directory is %CURRENT_DIRECTORY%
ECHO %ANT_HOME%
set Path=%ANT_HOME%\bin
set ADAPTER_LIBRAY_PATH=%1
set USER_JAR_PATH=%2
set CLASS_NAME=%3
set RESULTS_PATH=%4
set JUNIT_PATH=%"CURRENT_DIRECTORY"%ANT\test\junit-4.1.jar
set LIBRAIES_TO_INCLUDE="%JUNIT_PATH%";"%ADAPTER_LIBRAY_PATH%";"%USER_JAR_PATH%"
ECHO %LIBRAIES_TO_INCLUDE%
ECHO %ADAPTER_LIBRAY_PATH%
ECHO %JUNIT_PATH%
ECHO %USER_JAR_PATH%
ECHO %CLASS_NAME%
ECHO %RESULTS_PATH%
ant -lib "%LIBRAIES_TO_INCLUDE%" -Dlibraries="%ADAPTER_LIBRAY_PATH%" -Djunitlibrary="%JUNIT_PATH%" -Djartobeexec="%USER_JAR_PATH%" -Duserclass=%CLASS_NAME% -Dresultspath=%RESULTS_PATH% -buildfile build.xml test-html
这是我将值传递给我的批处理文件
的地方String[] commands=new String[5];
commands[0]="driver.bat";
commands[1]=finalLibraryPath;
commands[2]=executingJarLocation;
commands[3]=tempPackageName;
commands[4]=resultsFolderPath;
process = Runtime.getRuntime().exec(commands);
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuffer errorStr = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
errorStr.append(line);
errorStr.append(System.getProperty("line.separator"));
}
提前完成
此致 帕布
答案 0 :(得分:1)
好的,据我所知,我在“猜测”你正在做类似
的事情Runtime.exec("myBatchFile.bat " + path);
这将以泪水结束。这相当于说:
C:> myBatchFile.bat C:\Path to my jar files
这不起作用。基本上,您的批处理文件现在认为它有5个参数而不是一个。
要解决此问题,您需要单独传递每个命令/参数...
Runtime.exec(new String[] {"mybatchFile.bat", path});
或者更好的是,使用ProcessBuilder
ProcessBuilder pb = new ProcessBuilder("myBatchFile.bar", path);
答案 1 :(得分:0)
用引号括起路径。这意味着计算机从字面上理解它。您可以在记事本中遇到类似的问题,即使您提供了扩展程序,它也会在末尾添加.txt
扩展名。用引号括起来解决了这个问题。
答案 2 :(得分:-3)
通常用双引号括起路径("路径")适用于Unix,Linux等平台。 问题只出现在WIN平台上。这背后的原因是,只要WIN在要执行的文件的路径中看到空格,它就会恢复为8.3命名。在此命名中,它将Sub目录的前6个字符作为参数并搜索模式。 要解决此问题,您必须使用波浪号(〜)和表示该模式实例的数字附加前6个字符。
例如:
**原始路径:C:/ Program Files / Jdk1.6.0_07 / bin
要使用的路径:C:/Progra〜1 / Jdk1.6.0_07/bin **
我在很多Java应用程序中都使用了类似的方法,并且它一直都能正常工作。