2

Я пытаюсь использовать 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 к существующим параметрам, но безрезультатно. Почему я не работаю над подавлением запроса «Файл или каталог»? Есть ли заказ, в котором мне нужно назвать опции? Есть ли что-то еще, что мне нужно сделать?

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

5 ответов5

7

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))

6

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

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

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

1

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

0

Еще один возможный трюк - это предварительное создание целевого файла или папки. Тогда 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 это работает.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .