Java 无法对批处理创建的文件执行任何操作

Java 无法对批处理创建的文件执行任何操作,java,Java,这就是我努力实现的目标: 从JAVA程序运行批处理文件。批处理将在特定文件夹中创建一个新文件,例如文件夹“a”。创建新文件后,JAVA程序将新创建的文件从文件夹“A”移动到文件夹“B” 以下是代码片段: // Run a batch that creates a file String[] cmd = new String[]{"cmd", "/C", "start /min" + batchFilePath + batchFileName}; Process proc = Runtime.ge

这就是我努力实现的目标: 从JAVA程序运行批处理文件。批处理将在特定文件夹中创建一个新文件,例如文件夹“a”。创建新文件后,JAVA程序将新创建的文件从文件夹“A”移动到文件夹“B”

以下是代码片段:

// Run a batch that creates a file
String[] cmd = new String[]{"cmd", "/C", "start /min" + batchFilePath + batchFileName};
Process proc = Runtime.getRuntime().exec(cmd);  
proc.waitFor();


// Command in the batch file

dir c:\ > C:\Chen_Med\EDICron\EDIOUT\test.edi
exit

// Move the file created by batch
boolean result2= ediOutFile.renameTo(new File(processedFolder, ediOutFile.getName()));
这就是我运行上述代码时发生的情况: 在文件夹“A”中创建新文件。但是,新创建的文件不会移动到文件夹“B”

分析:

上述代码中没有语法问题。 我尝试了移动文件的替代方法。也就是说,将文件从文件夹“A”读写到文件夹“B”,然后从文件夹“A”删除该文件。已在文件夹“B”中创建新文件,但不会从文件夹“B”中删除该文件。 当我运行另一个试图移动文件的程序时,在执行上述程序后,它会工作。也就是说,运行时控制文件似乎有问题


请帮我解决这个问题。我已经浪费了一整天的时间试图找到解决方案:(

通过使用
cmd/c start…
启动批处理文件,您正在异步启动它——即,
cmd.exe
正在创建第二个进程来运行批处理文件,
proc.waitFor()
正在等待原始的
cmd.exe
,但不等待批处理文件本身。批处理文件随后与Java程序并行运行,甚至在创建文件之前就尝试从Java重命名文件


相反,只需使用
cmd/c batch.bat
,这应该可以很好地工作。

如果使用Java 7+:当我删除“start”参数时,批处理根本没有运行。您可能也需要删除
/min
。这肯定是正确的方法,因此如果一开始不起作用,不要放弃。