【问题标题】:Not able to perform any operation on a file created by batch无法对批处理创建的文件执行任何操作
【发布时间】:2012-05-04 22:20:08
【问题描述】:

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

下面是代码sn-p:

// 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”中删除。 当我运行另一个试图移动文件的程序时,在执行上述程序后,它就可以工作了。也就是说,运行时控制文件似乎存在问题。

请帮助我解决问题。我浪费了一整天的时间来寻找解决方案:(

【问题讨论】:

标签: java


【解决方案1】:

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

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

【讨论】:

  • 当我删除“start”参数时,批处理根本没有运行。
  • 您可能还需要删除/min。这绝对是正确的做法,所以如果一开始不起作用,请不要放弃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
相关资源
最近更新 更多