【问题标题】:Copying a file form one drive to multiple drive won't work in Eclipse IDE在 Eclipse IDE 中无法将文件从一个驱动器复制到多个驱动器
【发布时间】:2012-01-05 15:25:02
【问题描述】:

我需要从一个源到多个目标复制一个目录。例如,我从我的 C: 驱动器中复制了一个文件并将其粘贴到 许多外部驱动器中,例如 E:,F:,G:...等。对于这个过程,我使用了以下代码,

set src=%~1

:Loop
    shift
    set dest=%~1
    if "%dest%"=="" goto :EOF
    xcopy "%src%" "%dest%" /E
goto Loop

我将此代码 sn-p 保存为 .bat 在 system32 文件夹中。然后我用这个命令作为

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 

在这,我的错误是什么,我怎样才能得到准确的输出。尽快回复我。提前谢谢...!

【问题讨论】:

  • 使用 Java 来复制文件,而不是用命令行麻烦会不会更容易? Java 7 引入的新 java.nio 类将使您使用 Files.copy() 实现用例变得微不足道。此外,您的解决方案将是可移植的,而不是仅在您的 PC 上运行。
  • @pushy:我的目标是将文件从源复制到多个目标。这个概念可以从 Files.copy() 中实现吗?
  • 当然,为什么不呢。首先将文件复制到第一个目标,然后复制到第二个目标,依此类推,就像在批处理文件中一样。

标签: java file cmd


【解决方案1】:

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 解决方案,就像我在 cmets 中已经建议的那样;-)

【讨论】:

  • 有没有可能将复制代码sn-p转换成dos文件而不是.bat文件。
  • 在命令行执行cmd.exe /C c:/Windows/System32/mcopy C:/Users/FSSD/Desktop/Screenshot E: F:是否有效?如果没有,请尝试String exe_Cmd = "\"c:/Windows/System32/mcopy C:/Users/FSSD/Desktop/Screenshot E: F:\"";
  • 它可以在命令行中工作,但不能在java应用程序中工作
  • 好消息,我将脚本转换为 exe(默认 DOS 命令 exe),它运行良好,感谢您的努力。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
相关资源
最近更新 更多