具有多个带空格参数的Java ProcessBuilder

具有多个带空格参数的Java ProcessBuilder,java,parameters,cmd,space,processbuilder,Java,Parameters,Cmd,Space,Processbuilder,我知道有很多关于从java执行进程的问题已经解决了,但是我无法用提供的答案来解决我的问题。 我正在尝试从java应用程序创建postgresql数据库备份。我使用以下代码 //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:/PostgreSQL 8.2/bin/pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-

我知道有很多关于从java执行进程的问题已经解决了,但是我无法用提供的答案来解决我的问题。 我正在尝试从java应用程序创建postgresql数据库备份。我使用以下代码

        //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:/PostgreSQL 8.2/bin/pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:/backup test/backups/test_27-1-2013_210.backup", "test"});
        //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"});
        ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","\"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe\"","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","\"D:\\backup test\\backups\\test_27-1-2013_210.backup\"", "test"});
        Map<String, String> env = probuilder.environment();
        env.put("PGPASSWORD", "mypass");

        final Process process = probuilder.start();
//ProcessBuilder probuilder=new ProcessBuilder(新字符串[]{“cmd”、“/c”、“D:/PostgreSQL 8.2/bin/pg_dump.exe”、“-U”、“usr”、“-i”、“-h”、“localhost”、“-p”、“5432”、“-F”、“c”、“-b”、“-F”、“D:/backup test/backups/test_27-1-2013_210.backup”、“test”});
//ProcessBuilder probuilder=new ProcessBuilder(新字符串[]{“cmd”、“/c”、“D:\\PostgreSQL 8.2\\bin\\pg_dump.exe”、“-U”、“usr”、“-i”、“-h”、“localhost”、“-p”、“5432”、“-F”、“c”、“-b”、“-F”、“D:\\backup test\\backups\\backups\\tests\\test\U 27-1-2013\U 210.backup”、“test”});
ProcessBuilder probuilder=new ProcessBuilder(新字符串[]{“cmd”、“/c”、“\”D:\\PostgreSQL 8.2\\bin\\pg\U dump.exe\”、“-U”、“usr”、“-i”、“-h”、“localhost”、“-p”、“5432”、“-F”、“c”、“-b”、“-F”、“\”D:\\backup test backups\\backups\\tests\test\u27-1-2013\u210.backup\”、“test”);
Map env=probuilder.environment();
环境密码(“PGPASSWORD”、“mypass”);
最终流程=probuilder.start();
执行上述代码后,我得到以下错误:
D:\PostgreSQL'未被识别为内部或外部命令,
可操作的程序或批处理文件。

只有当备份文件的路径包含空格时才会出现问题,否则将创建备份。 我尝试在文件路径中使用斜杠和反斜杠,并引用了文件路径,但每次都会出现相同的错误。可以从命令提示符执行命令

我做错了什么。ProcessBuilder中带有空格的参数数量是否存在一些限制。
谢谢

因为
pg_dump.exe
是一个exe(而不是.bat),你根本不需要
cmd
,而且它可能会导致比它解决的问题更多的问题。只需直接调用
exe
,并删除文件路径周围的额外引号:

new String[]{"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i",
  "-h","localhost","-p","5432","-F","c","-b",
  "-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"}

你是男人。这就造成了问题。谢谢lot@user2115093谢谢,欢迎来到Stack Overflow。当你得到一个解决问题的答案时,点击左边的勾号接受它是一种很好的方式。建立一个接受好答案的记录是鼓励更多人帮助你解决未来问题的一种方式。我计划这样做,但我一开始找不到我需要点击的地方。再次感谢