Копирование файла с одного диска на несколько дисков не будет работать в Eclipse IDE - PullRequest
1 голос
/ 24 ноября 2011

Мне нужно скопировать каталог из одного источника из нескольких мест назначения . Например, я скопировал файл с моего диска C: и вставил его в множество внешних дисков, таких как E:, F:, G: ... и т. Д. . Для этого процесса я использовал следующий код,

set src=%~1

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

Я сохранил этот фрагмент кода как .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 

В этом и заключается моя ошибка, как я могу получить точный результат. Ответь мне как можно скорее. Заранее спасибо ...!

1 Ответ

1 голос
/ 24 ноября 2011

Параметры для 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, как я уже предлагал в комментариях; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...