xcopy file, rename, suppress Указывает ли xxx сообщение имени файла

Это кажется довольно простым, и, возможно, я просто упускаю из виду соответствующий флаг, но как мне с помощью одной команды скопировать файл из одного каталога в другой и переименовать его в целевом каталоге? Вот моя команда:

if exist "bin\development\whee.config.example"
  if not exist "TestConnectionExternal\bin\Debug\whee.config"
    xcopy "bin\development\whee.config.example"
          "TestConnectionExternal\bin\Debug\whee.config"

Он каждый раз предлагает мне следующее:

Указывает ли TestConnectionExternal \ bin \ Debug \ whee.config имя файла или имя каталога на целевом объекте (F = файл, D = каталог)?

Я хочу подавить это приглашение; ответ всегда F.


person Sarah Vessels    schedule 10.06.2010    source источник
comment
эхо f | xcopy ...   -  person Cyclion    schedule 25.11.2015
comment
Голосовать против, почему вы даже используете xcopy, если копия делает то, что вы хотите   -  person barlop    schedule 15.03.2018
comment
comment
Я рекомендую прочитать свой ответ на ПАКЕТНЫЙ файл запрашивает файл или папку, подробно объясняя, когда отображается запрос и как это можно сделать. отвечает автоматически пакетным файлом, независимым от языка ОС.   -  person Mofi    schedule 01.05.2019


Ответы (22)


Не используйте xcopy, используйте вместо этого copy, у него нет этой проблемы.

xcopy обычно используется при выполнении рекурсивных копий нескольких файлов / папок или когда вам нужны функции проверки / подсказки, которые он предлагает. Для копий отдельных файлов отлично работает команда copy.

person LBushkin    schedule 10.06.2010
comment
copy не будет копировать файл, если вся структура каталогов для места назначения еще не существует. xcopy автоматически создаст все необходимые каталоги. - person BQ.; 21.06.2011
comment
удивительно, что xcopy имеет это упущение. Если бы у него просто была опция для файлов, как для каталогов (/ I), это было бы решено, и xcopy мог бы стать отличной заменой для копирования. Вместо этого из-за этого дефекта вы должны выбрать копию для этих ситуаций. - person rocketmonkeys; 12.08.2011
comment
Как уже отмечали другие, ответ @Arnshea правильный. Это связано с тем, что а) особое обстоятельство OP, состоящее в том, что структура каталогов уже существует, не упоминалось в вопросе, и б) это гораздо более ценно для будущих читателей этого вопроса, которые придут сюда в поисках ответа относительно xcopy, а не просто copy. - person Mike Nakis; 04.09.2012
comment
Что ж, ответ @Amshea также правильный, потому что вопрос относится к xcopy, и этот ответ в основном не использует xcopy. На самом деле вообще не отвечает на вопрос о xcopy, не так ли? - person BrainSlugs83; 03.02.2013
comment
В моем случае мне нужны переключатели / F / R / D, которые предлагает xcopy, а copy отсутствует. Так что я соглашусь на ответ Амши. - person Emile; 30.09.2013
comment
xcopy имеет возможность выполнять копирование только в том случае, если источник новее, чем место назначения, поэтому в этом случае (и других) копию нельзя просто использовать вместо xcopy, поскольку она не будет выполнять ту же операцию. - person syplex; 16.01.2015
comment
Просто добавьте звезду в конце пути к цели. Посмотрите на этот ответ ниже. stackoverflow.com/a/26034267/1231 - person Donny V.; 16.02.2015
comment
Это чушь. Вся причина использования Xcopy заключается в том, что копия не может делать - person barlop; 15.03.2018
comment
Мне тоже не нравится этот ответ. Ответы @ Arnshea или zippycoder намного лучше, поскольку они используют xcopy, который может делать то, что копировать нельзя, например, в моем случае я хочу перезаписать целевой файл, даже если установлен атрибут только для чтения. - person Polyfun; 08.02.2019
comment
copy был удален из Windows 10. - person Jeff G; 08.08.2019

я использую

echo f | xcopy /f /y srcfile destfile

чтобы обойти это.

person Shea    schedule 10.06.2010
comment
@Arnshea - спасибо! Адаптирован для скрытого копирования каталога echo d | xcopy srcdirectory destdirectory /S - person Dr. Andrew Burnett-Thompson; 23.01.2012
comment
+1 @Arnshea, мне потребовалось некоторое время, чтобы понять, что вы именно там делаете, и, поскольку я работаю над немецкой установкой Windows, это echo d | xcopy ... для меня. Ты гениальный - person Thomas; 25.05.2012
comment
Можете ли вы подробнее рассказать о том, что он делает и почему он лучше принятого ответа? - person Snekse; 25.06.2012
comment
Он моделирует ответ пользователя на вопрос, который задаст xcopy. - person John Munsch; 15.08.2012
comment
@Thomas Означает ли это, что пакетный файл, использующий эту технику, не может переноситься в разные страны? - person Max Nanasy; 04.10.2012
comment
@MaxNanasy Я подтвердил, что это не переносимо между регионами. В немецкой настройке вы передаете D для файла или V для каталога. :( - person Matt; 14.12.2012
comment
Это здорово - я знал, что вы можете передавать файлы с ‹file.txt, но я не понимал, что вы можете использовать конвейер в подобных эхах - это может сэкономить мне несколько строк кода в моих пакетных файлах, где я передаю сначала в file.txt! - Один вопрос - бывает ли когда-нибудь, что xcopy может выдавать это приглашение более одного раза? (т.е. это направит один y в xcopy, что насчет второго запроса?) - person BrainSlugs83; 03.02.2013
comment
Отличный ответ! Я пытался написать пакетный скрипт с помощью xcopy, но возникла проблема, о которой упоминал OP. Спасибо за простое решение! - person ameed; 13.07.2013
comment
Спасибо @Arnshea, именно то, что мне нужно. Я копирую целые каталоги, поэтому вместо этого использую echo D | xcopy /f /y /d /e SourceDir DestDir - person JustSomeDev; 08.08.2013
comment
Я хочу выполнить всю эту команду из сценария оболочки с использованием окон cygwin. Я не могу передать d команде xcopy. пожалуйста помоги - person kishorer747; 04.11.2015

Другой вариант - использовать подстановочный знак места назначения. Обратите внимание, что это работает только в том случае, если имена файлов источника и назначения будут одинаковыми, поэтому, хотя это не решает конкретный пример OP, я подумал, что им стоит поделиться.

Например:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 

создаст копию файла "whee.config.example" в целевом каталоге без запроса файла или каталога.

Обновление: как упомянул @chapluck:

Вы можете изменить "* " на "[newFileName].*". Сохраняет расширение файла, но позволяет переименовать. Или более хакерский: "[newFileName].[newExt]*" изменить расширение

person zippycoder    schedule 09.02.2013
comment
Эхо f | способ - это круто, но это позволяет избежать лишних выводов, которые я часто ищу, чтобы найти проблемы в первую очередь. - person DoctorFoo; 12.03.2014
comment
@ Durden81 - как указывает zippycoder, их ответ не переименовывает файл, что было требованием OP. - person Polyfun; 29.05.2014
comment
Чтобы расширить ответ, я бы изменил * на [newFileName]. *. Сохраняет расширение файла, но позволяет переименовать. Или более хитрый: [newFileName]. * [NewExt], чтобы изменить расширение. - person chapluck; 01.12.2014
comment
Спасибо! Раздел обновления - это то, что решило мою проблему, когда нужно было изменить имя файла, сохранив расширение и предполагая, что это файл. В XCopy это должно было быть переключателем. - person Stanislav; 12.07.2016
comment
Почему это не ответ. Это правильный ответ, основанный на ss64.com/nt/xcopy.html. - person Luigi Mackenzie C. Brito; 08.12.2016
comment
У меня работало без звездочки в конце, только обратная косая черта. - person tivnet; 30.08.2017
comment
Это работает даже при копировании одного файла и его переименовании, например: xopy file * .bat в newfile.bat *. Я вынужден сделать это, потому что поставщик переименовывает установочный файл каждый раз при выпуске новой версии. Поэтому, хотя мне не нужно повторно редактировать командный файл для нескольких развертываний, копирование файла с «фиксированным» именем файла помогает мне в моей стратегии развертывания. - person Jim Lahman; 07.05.2018
comment
@zippycoder Лучше, чем ответы выше, потому что он фактически использует xcopy (а не копию) и не зависит от локали. Это решило мою проблему с копированием файла XML, в котором изменяется имя файла, но не расширение. - person SBS; 11.10.2019

В XCOPY есть какая-то недокументированная функция. ты можешь использовать:

xcopy "bin \ development \ whee.config.example" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config *"

я проверил это только сегодня. :-)

person ienaxxx    schedule 25.09.2014
comment
Большое спасибо. Я добавил * в конце файла назначения, и это сработало .. :) +1 за трюк - person Rahul Patel; 27.11.2014
comment
Отличное решение - чистое, элегантное, не использует другую команду, совместимо с существующими флагами xcopy, работает безупречно. Это должен быть самый популярный ответ. - person Brian Swift; 12.09.2015
comment
Ответ неверен, команда приведет к whee.config.example в папке назначения, потому что whee.config* совпадает с whee.config.example. - person Meow; 17.01.2016
comment
Я только что создал файл b.txtxt, а затем запустил команду xcopy a.txt b.txt* /F /Y, и файл a.txt был скопирован в b.txt, как и ожидалось. Кроме того, при использовании переключателей /F /Y на экране отображается фактическая копия, как и ожидалось. - person Dominique; 26.07.2016
comment
@Meow: нет, поскольку подстановочный знак находится в месте назначения, а не в источнике. - person ienaxxx; 10.04.2018
comment
Это не сработало для меня и скопировало (намного) больше, чем должно было. В моем случае я копировал определенные файлы из каталогов, содержащих много файлов и подкаталогов, и он копировал слишком много, хотя звездочка была, правильно, только в параметре назначения и заключена в двойные кавычки. Однако использование echo f| работало именно так, как я хотел - person mwag; 08.05.2019

Просто перейдите на страницу http://technet.microsoft.com/en-us/library/bb491035.aspx

Вот в чем заключается ГЛАВНАЯ ПРОБЛЕМА "... Если пункт назначения не содержит существующего каталога и не заканчивается обратной косой чертой (), появляется следующее сообщение: ...

Указывает ли пункт назначения имя файла или имя каталога в целевом объекте (F = файл, D = каталог)?

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

Мне потребовалось время, но все, что нужно, - это RTFM.

person Bill    schedule 09.08.2013
comment
Это должен быть главный ответ! Просто чтобы быть действительно понятным для других. Если вы копируете ОДИН файл из одного места в другое и хотите, чтобы была создана полная структура каталогов, используйте следующую команду: xcopy / C: \ Data \ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb- 67ecff20c96b.jpg C: \ Target Data \\ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb-67ecff20c96b.jpg \. Да, ставьте обратную косую черту в конце имени файла! - person adudley; 20.08.2013
comment
Хороший ответ, но проблему не решает. Я попробовал xcopy hello.txt hello2 \. Нет подсказки. Теперь я пробую xcopy hello.txt hello3 (без обратной косой черты). Он спрашивает меня, является ли dest файлом или каталогом. Мне нужен способ сказать ему, чтобы он предполагал F или D в сценарии. - person RuntimeException; 30.07.2014
comment
Это очень странный ответ, особенно из-за положительных голосов, бесполезного RTFM-снарка и комментариев, содержащих популярные ответы ... поскольку он не касается исходного вопроса! В исходном вопросе четко говорилось, что скопируйте файл из одного каталога в другой и переименуйте его в целевом каталоге. Приведенная выше попытка ответа, по-видимому, относится к другому случаю копирования файла с именем конечного файла, являющимся ЖЕЛЕЗНЫМ именем в качестве исходного файла. Грязный обходной путь, предложенный @Arnshea, - это единственный одношаговый ответ, который я вижу здесь - отсюда его популярность. - person M.Bearden; 15.08.2014
comment
Г-н Бирден был довольно вежлив, но, учитывая количество голосов «за», я считаю необходимым прямо перечислить проблемы с этим ответом: 1) первый параграф, который, кажется, дает решение проблемы OP (параграф 4 из 5), не работает не, потому что OP копирует и переименовывает файл, не каталог; 2) ссылка в верхней части ответа не предлагает решение; 3) формулировка основной проблемы неприменима к вопросу OP; 4) ответ оскорбительный, с криком во 2-м абзаце и оскорблениями в последнем. Возможно, ему стоило перечитать Вопрос. - person GlennFromIowa; 25.09.2015
comment
Весь приведенный здесь ответ - копировать в каталог, а не копировать в место назначения файла, что возможно и недокументировано, см. Другой ответ от zippycoder, chapluck, LBushkin - person pdem; 09.06.2016
comment
Как сказано выше, ваш ответ не работает, по крайней мере, для копирования файлов. Жаль, что я проголосовал за, а затем прошло 10 минут, прежде чем я узнал, что это не работает;) - person ntg; 08.07.2016
comment
Это не отвечает на OP, где он специально НЕ хочет принимать каталог для вывода, что делает переключатель / I. К тому же ответ сформулирован ехидно. - person Stanislav; 12.07.2016
comment
Даже когда присутствует /I, это приглашение все равно появляется при копировании одного файла ... Я действительно не понимаю, почему здесь так много голосов за ... - person The Godfather; 19.07.2021

Итак, для этого есть простое решение. По общему признанию, это неудобно, но работает. xcopy не будет запрашивать, является ли пункт назначения каталогом или файлом, ЕСЛИ новый файл (имя файла) уже существует. Если перед командой xcopy вы укажете простое эхо для нового имени файла, он перезапишет пустой файл. Пример

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y
person DaveD    schedule 10.10.2012
comment
При этом не будут копироваться атрибуты файла :-( Если вам не нужны атрибуты, разве copy не лучше? - person Pavel Vlasov; 07.01.2021

Это из ответа Билла.

Просто чтобы быть действительно понятным для других.

Если вы копируете ОДИН файл из одного места в другое, И вы хотите создать полную структуру каталогов, используйте следующую команду:

xcopy "C:\Data\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg" "C:\Target Data\\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg\" 

Да, поставьте обратную косую черту в конце имени файла, и он НЕ спросит вас, является ли это файлом или каталогом. Поскольку в источнике только ОДИН файл, он будет считать, что это файл.

person adudley    schedule 20.08.2013
comment
Это не правильно. При запуске xcopy versionBase.txt asd \ versionBase.txt \ и отсутствии каталога asd я получаю файл asd \ versionBase.txt \ versionBase.txt. - person Cristian Niculescu; 12.08.2014
comment
Как и в случае с другими ответами на этой странице, в этом сообщении не рассматривается исходный вопрос. Вопрос был в том, как скопировать И переименовать (за один шаг) файл. Как и в случае с другими явно запутанными ответами, здесь говорится о том, как скопировать файл БЕЗ переименования. - person M.Bearden; 24.10.2014
comment
Не говоря уже о том, что он действительно создает каталог с этим именем, а не папку. Протестируйте его, а потом запустите каталог, и вы увидите что-то вроде этого: dir "C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg - person GlennFromIowa; 25.09.2015

У меня была аналогичная проблема, и robocopy и xcopy не помогли, так как я хотел подавить комментарии и использовать другое имя файла назначения. я нашел

type filename.txt > destfolder\destfilename.txt

работает согласно моим требованиям.

person user140185    schedule 14.01.2016

Вернемся к исходному вопросу:

 xcopy "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\whee.config"

может быть выполнено двумя командами, например:

mkdir "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

Просто добавив "\ .." к пути к файлу назначения, создается каталог назначения, если он еще не существует. В таком случае

"c:\mybackup\TestConnectionExternal\bin\Debug\"

который является родительским каталогом несуществующего каталога

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."

По крайней мере, для WIN7 mkdir все равно, если каталог

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

действительно существует.

person grenix    schedule 11.11.2013
comment
Интересное исправление, если каталог не существует. К сожалению, следующая строка (в моем тестировании) все еще предлагает пользователю. - person GlennFromIowa; 25.09.2015
comment
Вы правы, это должно быть xcopy bin \ development \ whee.config.example c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config \. Я использовал свой подход для копирования файлов в каталог, который мог не существовать. Для переименования похоже, что в конце нужно добавить обратную косую черту. - person grenix; 23.02.2016

XCOPY с * в конце цели для копирования файлов независимо от того, существуют они или нет в месте назначения XCOPY с \ в конце цели для копирования папок и содержимого независимо от того, существуют они или нет в месте назначения

Альтернативно

RoboForm SOURCE DEST ФАЙЛ для файлов RoboForm SOURCE DEST для папок

person Colin Hay    schedule 24.01.2018

Я предлагаю robocopy вместо copy или xcopy. Используется как команда или в графическом интерфейсе на клиентах или серверах. Устойчивый к сетевым паузам, и вы можете игнорировать атрибуты файла при копировании копии по атрибутам файла. Да, и он поддерживает многоядерные машины, поэтому файлы копируются намного быстрее «параллельно» друг с другом, а не последовательно. robocopy можно найти в MS TechNet.

person surferdj    schedule 20.02.2013
comment
Я все время использую robocopy. Однако, что касается вопроса этого плаката, это не сработает, так как не может переименовывать файлы. Чего я не знал до сегодняшнего дня, так это того, что в xcopy есть переключатель a / z, который допускает паузы в сети! - person GlennFromIowa; 25.09.2015

Правильный вариант, если вы хотите скопировать только файл и изменить его имя в месте назначения:

xcopy / f / y "bin \ development \ example.exe" "TestConnectionExternal \ bin \ Debug \ NewName.exe *"

И все будет хорошо

person Thanos    schedule 14.05.2017

Для копирования больших файлов хорошим выбором будет xopy с переключателем / J. В этом случае просто введите F для файла или D для каталога. Кроме того, вы можете сохранять задания в массиве для использования в будущем. Например:

$MyScriptBlock = {
    Param ($SOURCE, $DESTINATION) 
    'F' | XCOPY $SOURCE $DESTINATION /J/Y 
    #DESTINATION IS FILE, COPY WITHOUT PROMPT IN DIRECT BUFFER MODE
}
JOBS +=START-JOB -SCRIPTBLOCK $MyScriptBlock -ARGUMENTLIST $SOURCE,$DESTIBNATION
$JOBS | WAIT-JOB | REMOVE-JOB

Спасибо Чанду с небольшими изменениями: https://stackoverflow.com/users/3705330/chand

person MAZDA    schedule 28.12.2017

Поставьте звездочку (*) в конце пути назначения, чтобы пропустить спор между D и F.

Пример:

xcopy "compressedOutput.xml" "../../Execute Scripts / APIAutomation / Libraries / rerunlastfailedbuild.xml *"

person Iqra.    schedule 04.09.2019

Я столкнулся с той же проблемой при попытке скопировать файл с новым именем, только если файл не существует в месте назначения или существует (с новым именем), но старше. Решение состоит в том, чтобы добавить * char в конце имени файла назначения. Пример:

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y
person Ivan Alexandrov    schedule 01.06.2020

При копировании файлов используйте copy вместо xcopy.

например скопируйте "bin \ development \ whee.config.example" "TestConnectionExternal \ bin \ Debug \ whee.config"

person Peter    schedule 28.10.2010
comment
Я пытаюсь скопировать файл в ту же папку с другим именем, и xcopy не работает. Я использую copy /Y source destination для передачи подтверждения перезаписи. - person SandRock; 16.06.2014

Поскольку вы на самом деле не меняете имя файла, вы можете вынуть имя файла из места назначения, и вопросов не возникнет.

xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\  /Y

Этот подход хорошо работает, когда гарантированно существует целевой каталог и когда источником в равной степени может быть файл или каталог.

person simmo    schedule 05.09.2011
comment
@downvoters: Почему за этот ответ могли проголосовать против? В этом контексте, вероятно, существует гарантированное существование каталога Debug. - person Jirka Hanika; 14.05.2013
comment
В этом ответе говорится, что вы фактически не меняете имя файла, тогда как в исходном вопросе четко говорилось, что скопируйте файл из одного каталога в другой И ПЕРЕИМЕНОВайте его в целевом каталоге. Так что это не имеет отношения к теме. - person M.Bearden; 15.08.2014

Работайте вокруг, используйте ReName ... и назовите его каким-нибудь загадочным именем, затем переименуйте его в его собственное имя

C:

Компакт-диск "C: \ Users \ Public \ Documents \ My Web Sites \ AngelFire ~ Zoe \"

XCopy / D / I / V / Y "C: \ Users \ Public \ Documents \ My Web Sites \ HostGator ~ ZoeBeans \ cop.htm"

Ren "cop.htm" "christ-our-passover.htm"

person JollyChollie    schedule 06.06.2013

xcopy позволит вам скопировать один файл в указанную папку, он просто не позволит вам определить имя назначения. Если вам требуется имя назначения, просто переименуйте его, прежде чем копировать.

ren "bin \ development \ whee.config.example" whee.config

xcopy / R / Y "bin \ development \ whee.config" "TestConnectionExternal \ bin \ Debug \"

person Chuck Emanuel    schedule 08.06.2015
comment
Предполагая, что это сработает в определенной среде (т.е. в исходной папке наверняка никогда не будет whee.config), для репликации кода OP не следует ли включать переименование обратно в исходное имя? ren "bin\development\whee.config" whee.config.example - person GlennFromIowa; 25.09.2015

Указывает ли xxxxxxxxxxxx имя файла или имя каталога на целевом объекте

(F = file, D = directory)? D

if a File : (echo F)
if a Directory (echo D)
person Dania al khalil    schedule 08.10.2019

Вы не можете указать, что это всегда файл. Если вам не нужны другие функции xcopy, почему бы просто не использовать обычные copy?

person Gabe    schedule 10.06.2010
comment
Одна из причин заключается в том, что copy, будучи внутренней командой, не устанавливает ErrorLevel. Если вы хотите иметь возможность влиять на путь к пакетному файлу при возникновении ошибки копирования, вам необходимо использовать XCOPY. - person rossmcm; 07.07.2011
comment
Другая причина - если вы хотите использовать другие функции xcopy, например / d - person Victoria; 24.03.2016

person    schedule
comment
Это все еще запрашивается при копировании одного файла - person The Godfather; 19.07.2021