通过java执行批处理文件,将文件路径作为包含空格的参数传递

时间:2014-01-04 09:04:35

标签: java windows batch-file

我正在尝试通过提供库位置来更新批处理文件中的类路径。

我通过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

由于

1 个答案:

答案 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都用引号括起来处理任何空格问题。