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