xcopy Не Удивительный Запрос Файла / Директории

11234
Daniel Bingham

Я пытаюсь использовать xcopy для копирования файла с одного компьютера на другой в нашей сети как часть Java-программы. Я звоню xcopy так:

xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i 

Поскольку я вызываю его с помощью Java, мне нужно подавить все запросы. По большей части, \ i и \ y сделали именно это. Тем не менее, для этого одного файла / я не удается, и я получаю приглашение файла или каталога. В результате зависает вся программа.

Я также попытался вызвать его с добавлением / s / t / q к существующим параметрам, но безрезультатно. Почему я не работаю над подавлением запроса «Файл или каталог»? Есть ли заказ, в котором мне нужно назвать опции? Есть ли что-то еще, что мне нужно сделать?

РЕДАКТИРОВАТЬ: я должен упомянуть, файл представляет собой текстовый файл - одна строка текста. У него нет расширения. Это выглядит так: ИМЯ ФАЙЛА

2

5 ответов на вопрос

7
Marc Wittke

echo F делает трюк:

echo F | xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i 

Обратите внимание, что символ может отличаться в локализованных версиях (мой немецкий ожидает D для файла (Datei) или V для каталога (Verzeichnis))

локализации нет, это все та же буква в Win 8 rus. Однако это раздражает. Я бы предпочел, чтобы xcopy использовал параметр `/ -i` для подавления этого глупого вопроса. Arioch 'The 5 лет назад 0
6
Govert

Казалось бы, недокументированный трюк заключается в том, чтобы поместить *в конец места назначения - тогда xcopy скопирует в файл, так что

xcopy c:\source\file.txt c:\destination\newfile.txt*

echo f | xcopy ...Трюк не работает на локализованных версиях Windows, где подсказка отличается.

`echo f` хотя бы работает на русском Win 8.1 // PS. Уловка звездочки работает, я могу только удивляться, кто мог когда-либо обнаружить это! Могу поспорить, что это ошибка в xcopy, которая [ab] используется для компенсации отсутствия необходимой функции Arioch 'The 5 лет назад 0
1
Milde

В этой теме на Stackoverflow нет отмеченного ответа, но он может помочь вам (кажется, тот же вопрос).

Спасибо за предложение, но это довольно другой сценарий. Это подавляет сам терминал при вызове командного файла. Я пытаюсь подавить подсказку, которую дает xcopy. Daniel Bingham 14 лет назад 0
0
Col

Я всегда находил полезный чит для этих ситуаций, чтобы иметь текстовый файл с Y и тегом <y.txt в конце xcopy

0
Arioch 'The

Еще один возможный трюк - это предварительное создание целевого файла или папки. Тогда xcopyбы не спрашивал, потому что это уже знал бы. Я бы не сказал, что это решение лучше упомянутых выше, оно просто другое, и поэтому я хочу, чтобы оно было здесь.

Моей простой задачей было скопировать несколько файлов из сетевой папки в локальную папку.

  • AAAAA \ Disk1.zip => AAAAA.zip
  • BBBBB \ Disk1.zip => BBBBB.zip
  • и так далее

Исходная команда (одна строка чуть более длинного файла сценария .cmd) была

for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip 

Это, однако, порождает много вопросов о (F) ile- или (D) -директорах при первом использовании с новыми (ранее не встречавшимися) файлами. Особенно, если я заполняю новую пустую целевую папку.

Затем echo Fи Asterisk Hack отвечают - они тоже работают нормально.

  • for /d /r %SRC% %%1 in (*.*) do echo f | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
  • for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip*

Теперь, еще одно потенциальное решение было бы явно СОЗДАТЬ целевую папку файла прямо перед выполнением xcopyкоманды.

Для файла это будет, например:

echo. > C:\Temp\TargetPlace xcopy Source C:\Temp\TargetPlace 

К сожалению, Windows по умолчанию не имеет touchкоманды, весьма полезной для создания фиктивного 0-байтового файла.

Для папки это будет, например:

mkdir C:\Temp\TargetPlace xcopy Source C:\Temp\TargetPlace 

Конечно, в сценарии оболочки CMD требуется две команды - две строки. Вы не можете поместить несколько команд в CMD цикла легко, но здесь вы можете трубу команды вместе ( при условии, что xcopyбудете НЕ на самом деле никакого ввода пользователя при выдаче конкретной команды, которая может измениться, например, в будущих версиях окна, хотя и маловероятны).

Для папок:

for /d /r %SRC% %%1 in (*.*) do md %~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip 

Для файлов:

for /d /r %SRC% %%1 in (*.*) do echo. >%~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip 

Эта последняя команда имеет ДВА выходных перенаправления между - echo.> ... | xcopy, Но по крайней мере в .cmdфайлах Windows 8.1 это работает.

Похожие вопросы