我需要从一个源到多个目标复制目录。例如,我从 C: 驱动器复制了一个文件,并将其粘贴到许多外部驱动器,例如 E:、F:、G:...等。对于这个过程,我使用了以下代码,
set src=%~1
:Loop
shift
set dest=%~1
if "%dest%"=="" goto :EOF
xcopy "%src%" "%dest%" /E
goto Loop
我将此代码片段保存为 system32 文件夹中的 .bat。然后我使用这个命令作为
C:\Windows\System32>mcopy C:\Users\FSSD\Desktop\Screenshot E: F:
我在命令提示符下执行了此命令,它执行成功。
然后我尝试在我的java应用程序中实现这个命令。
我的java代码是,
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MultipleCopy{
public static void main(String args[]) {
String exe_Cmd = "c:/Windows/System32/mcopy C:/Users/FSSD/Desktop/Screenshot E: F:";
Runtime r = Runtime.getRuntime();
ProcessBuilder p = new ProcessBuilder(new String[] { "cmd.exe", "/C",
exe_Cmd });
Process pro;
try {
pro = p.start();
InputStream is = pro.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("IO Exception" + e.getMessage());
}
}
}
它执行时没有任何错误,但文件不会复制。
我的 eclipse IDE 控制台的输出是:
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>set src=C:/Users/FSSD/Desktop/Screenshot
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>shift
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>set dest=E:
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>if "E:" == "" goto :EOF
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>xcopy "C:/Users/FSSD/Desktop/Screenshot" "E:" /E
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>goto Loop
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>shift
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>set dest=F:
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>if "F:" == "" goto :EOF
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>xcopy "C:/Users/FSSD/Desktop/Screenshot" "F:" /E
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>goto Loop
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>shift
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>set dest=
C:\Users\FSSD\IndigoWorkSpace\Multi_Copy>if "" == "" goto :EOF
在这里,我的错误是什么,我怎样才能得到准确的输出。尽快回复我。提前致谢...!
最佳答案
ProcessBuilder 的参数不能包含空格,而是
String exe_Cmd = "c:/Windows/System32/mcopy C:/Users/FSSD/Desktop/Screenshot E: F:";
你需要
String[] pars = {"cmd.exe", "/C","c:/Windows/System32/mcopy","C:/Users/FSSD/Desktop/Screenshot","E:","F:"};
Runtime r = Runtime.getRuntime();
ProcessBuilder p = new ProcessBuilder(pars);
但我仍然宁愿使用 Java 解决方案,就像我在评论中建议的那样;-)
关于java - 在 Eclipse IDE 中无法将文件从一个驱动器复制到多个驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257391/