我正在尝试通过提供库位置来更新批处理文件中的类路径。
我通过java调用bat文件,将库位置作为参数传递, 如果库路径位置没有空间,我的代码将完美执行, 如果库路径包含空格,则bat文件抛出异常,无法找到或加载主类
下面是我的代码
public class TestBat {
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start",
"C:\\Users\\graymatter\\Desktop\\MyBatch.bat",
"D:\\Testing\\Main Plan");
pb.start();
}
}
此代码执行完美, 如果路径有“D:\ Testing \ MainPlan”,则输入“D:\ Testing \ Main Plan”
这是我的bat文件
@echo off
setlocal EnableDelayedExpansion
set DIR1=%1
echo %DIR1%
set CLASSPATH=.
FOR %%F IN ("%DIR1%"\lib\*.jar) DO (set CLASSPATH=!CLASSPATH!;%%F)
java -cp %CLASSPATH% com.pentaho.support.TestBat %*
据我所知,由于路径中的空间,我得到了这个错误, 我通过使用转义序列尝试了很多, 但没用。
甚至提及@ Spaces in file path in java
由于
答案 0 :(得分:1)
如果参数包含空格,则需要引用它。使用"\"D:\\Testing\\Main Plan\""
批处理文件应该是
@echo off
setlocal EnableDelayedExpansion
set "DIR1=%~1"
echo %DIR1%
set CLASSPATH=.
FOR %%F IN ("%DIR1%\lib\*.jar") DO (set "CLASSPATH=!CLASSPATH!;%%F")
java -cp "%CLASSPATH%" com.pentaho.support.TestBat %*
其中%~1
表示没有引号的批处理文件的第一个参数(如果有的话)。然后,所有变量read / set都用引号括起来处理任何空格问题。