1

我有一个包含几个 jar 文件的文件夹。我指的是来自其他位置的另一个 jar 文件中的那些 jar 文件。

我的问题是,当我像这样给出 jar 文件夹的路径时C:\Trial Library\jar Folder\。如果文件夹名称(试用库)中有空格,则无法找到此文件夹。

如果我给没有空间即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"));  

}

提前感谢

问候,帕布

4

3 回答 3

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);
于 2012-08-30T19:44:36.210 回答
0

将路径用引号括起来。这意味着计算机从字面上理解它。记事本可能会遇到类似的问题,.txt即使您提供了扩展名,它也会在末尾添加扩展名。用引号括起来可以解决这个问题。

于 2012-08-30T06:56:02.650 回答
-2

通常将路径括在双引号(“路径”)中适用于 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 应用程序中都使用了类似的方法,并且它一直都能正常工作。

于 2014-11-21T13:51:54.850 回答