Ответ 1
Документация Xcopy сообщает следующее:
Указание того, является ли Destination файлом или каталогом Если Destination не содержит существующий каталог и не заканчивается обратным слэшем (\), появляется следующее сообщение:
Does destination specify a file name
or directory name on the target
(F = file, D = directory)?
Нажмите F, если вы хотите, чтобы файл или файлы были скопированы в файл. Нажмите D, если вы хотите скопировать файл или файлы в каталог.
Вы можете подавить это сообщение с помощью параметра командной строки /i, что приводит к тому, что xcopy
предполагает, что назначение является каталогом, если источником является более одного файла или каталога.
Вам нужно обратное, но такого переключателя нет.
Решение предлагается здесь: fooobar.com/questions/79409/....
Предлагается добавить команду xcopy
с префиксом echo f |
, который в основном делает следующее: он имитирует пользователя, нажимая клавишу f
, когда запрашивает xcopy
.
Итак, ваша команда должна выглядеть так:
if exist $(TargetPath)
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y
Оператор |
просто передает вывод echo f
(== f
) в команду xcopy
, и при необходимости считывается. Подробнее о перенаправлении вывода здесь: http://ss64.com/nt/syntax-redirection.html.
UPDATE: Как указывает Govert , этот хак не будет работать под локализованной версией Windows. Однако другой хак будет работать:
xcopy D:\file.zip c:\renamedFile.zip*
Добавление имени целевого файла со звездочкой *
делает xcopy не спрашивать, является ли целевой файл или каталог.