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