xcopy файл, перейменуйте, придушіть повідомлення "Чи вказано xxx ім'я файлу ..."


404

Це здається досить простим, і, можливо, я просто пропускаю відповідний прапор , але як би я за допомогою однієї команди скопіював файл з одного каталогу в інший і перейменував його в каталог призначення? Ось моя команда:

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.


15
відлуння f | xcopy ...
— Cyclion

downvote, чому ви навіть використовуєте xcopy, якщо копія робить те, що ви хочете
— barlop

3
Miscrosoft : "навіщо робити щось просте, коли ви можете зробити його справді заплутаним для своїх користувачів?". Цього разу вони повинні просто скопіювати те, що робиться у світі Linux, і не шукайте cpжодних файлів / файлів навколо!
— fduff


Я рекомендую прочитати мою відповідь у файлі BATCH із запитом на файл або папку, де детально пояснюється, коли відображається підказка і як на нього можна автоматично відповісти незалежно від мови пакетного файлу ОС.
— Мофі

Відповіді:


217

Не використовуйте xcopy, використовуйте copyнатомість, у ньому немає цієї проблеми.

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


97
copyне скопіює файл, якщо вся структура каталогів для пункту призначення ще не існує. xcopyавтоматично створить усі необхідні каталоги.
— BQ.

41
Це дивно , що хсор має це упущення. Якби він просто мав можливість для файлів, таких як у каталогах (/ I), це вирішиться, і xcopy може стати чудовою заміною копії. Натомість через цей дефект ви повинні вибрати копію для цих ситуацій.
— rocketmonkeys

35
Як вже вказували інші, відповідь @ Арншея правильна. Це тому, що: а) конкретна обставина ОП, що вже має структуру каталогів, не згадується у запитанні; б) набагато цінніше для майбутніх читачів цього питання, які прийдуть сюди, шукаючи відповідь стосовно, xcopyа не просто. copy.
— Майк Накіс

17
Ну @ відповідь Амшея також є правильною, тому що питання є специфічним для xcopy, і в основному ця відповідь "не використовуйте xcopy". Насправді зовсім не відповідає на питання про xcopy, зараз це?
— BrainSlugs83

9
Просто додайте зірку в кінці шляху для цілі. Подивіться на цю відповідь нижче. stackoverflow.com/a/26034267/1231
— Донні В.

638

я використовую

echo f | xcopy /f /y srcfile destfile

щоб обійти його.


17
@Arnshea - дякую! Адаптовано для безшумної копії каталогівecho d | xcopy srcdirectory destdirectory /S
— доктор ABT

8
+1 @Arnshea. У мене знадобився певний час, щоб зрозуміти, що ти саме там робиш, і оскільки я працюю над німецькою установкою Windows, це echo d | xcopy ...для мене. Ви геніальний
— Томас

23
Він імітує відповідь користувача на питання, яке задасть xcopy.
— Джон Мюнш

5
@Thomas Це означає, що пакетний файл, який використовує цю техніку, не буде переносним в різних локалях?
— Макс Нанасі

17
@MaxNanasy Я підтвердив, що це не портативно для локалів. У налаштуваннях німецької мови ви передаєте D для файлу або V для каталогу. :(
— Метт

177

Іншим варіантом є використання підстановочного символу призначення. Зауважте, що це працює лише в тому випадку, якщо імена файлів джерела та місця призначення будуть однаковими, тому, хоча це не вирішує конкретний приклад ОП, я вважав, що варто поділитися.

Наприклад:

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

створить копію файлу "whee.config.example" в каталозі призначення без запиту на файл чи каталог.

Оновлення : Як згадував @chapluck:

Ви можете змінити "* "на "[newFileName].*". Він зберігається розширенням файлу, але дозволяє перейменувати. Або ще більш хакі: "[newFileName].[newExt]*"змінити розширення


1
"Відлуння f |" це здорово, але це дозволяє уникнути зайвих результатів, які я часто шукаю, щоб знайти проблеми в першу чергу.
— Річард Ентоні Хайн

6
@ Durden81 - як вказує zippycoder, їх відповідь не перейменовує файл, що було вимогою ОП.
— Поліфун

6
Щоб розширити відповідь, я змінив би "*" на "[newFileName]. *". Він зберігається розширенням файлу, але дозволяє перейменувати. Або ще більш хакі: "[newFileName]. * [NewExt]", щоб змінити розширення.
— chapluck

Дякую! Розділ оновлення - це те, що вирішило мою проблему, де ім'я файлу потрібно змінити, зберігаючи розширення та припускаючи, що це файл. XCopy повинен був мати це як комутатор.
— Станіслав

1
Працював для мене без зірочки в кінці, просто нахил.
— tivnet

91

У XCOPY є якась недокументована функція. Ви можете використовувати:

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

Я перевірив це тільки сьогодні. :-)


4
Дуже дякую. Я додав "*" в кінці файлу призначення, і він спрацював .. :) +1 для хитрості
— Рахул Пател

2
Відмінне рішення - чисте, елегантне, не використовує іншу команду, сумісне з існуючими прапорцями xcopy, працює бездоганно. Це має бути найвища відповідь.
— Брайан Свіфт

7
Відповідь невірна, команда призведе whee.config.exampleдо папки призначення, оскільки whee.config*відповідає whee.config.example.
— Мяу

2
Я просто створив файл b.txtxt, а потім запустив команду, xcopy a.txt b.txt* /F /Yі файл a.txtбув скопійований b.txt, як очікувалося. Крім того, під час використання /F /Yперемикачів фактична копія відображається на екрані, точно так, як очікувалося.
— Домінік

1
@Meow: ні, оскільки підказка знаходиться в пункті призначення, а не в джерелі.
— ienaxxx

74

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

Ось що ГОЛОВНЕ ВИДАЧА "... Якщо пункт призначення не містить існуючого каталогу і не закінчується зворотною косою рисою (), з'являється таке повідомлення: ...

Чи вказує місце призначення ім'я або ім'я файлу в цілі (F = файл, D = каталог)?

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

Зайняв мене деякий час, але все, що потрібно, - це RTFM.


7
Це має бути головна відповідь! Просто, щоб бути дійсно зрозумілим для інших. Якщо ви копіюєте ОДИН файл з одного місця в інший І хочете створити повну структуру каталогу, скористайтеся такою командою: xcopy / "C: \ Data \ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb -67ecff20c96b.jpg "" C: \ Цільові дані \\ Зображення \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb-67ecff20c96b.jpg \ ". Так, покладіть зворотну косу риску в кінці імені файлу!
— adudley

4
Гарна відповідь, але не вирішує проблему. Я спробував xcopy hello.txt hello2 \. Без підказки Тепер я спробую xcopy hello.txt hello3 (без зворотної косої риси). Це спонукає мене, щоб це було файлом чи dir. Мені потрібен спосіб сказати, щоб прийняти F або D у сценарії.
— RuntimeException

27
Це дуже дивна відповідь, особливо через нагороди, недоброзичливий "RTFM" snark та коментарі, що відкладають "популярні" відповіді ... оскільки це не стосується початкового питання! У початковому запитанні чітко сказано: "скопіюйте файл з одного каталогу в інший І ПОВЕРНУЙТЕСЯ ІТ в каталог призначення". Подана вище спроба відповіді, як видається, стосується різного випадку копіювання файлу, при цьому ім'я цільового файлу є іменем SAME як вихідний файл. "Брудний" спосіб, який дає @Arnshea, є єдиною одноразовою відповіддю, яку я бачу тут, і тому її "популярність".
— М.Беарден

3
Пан Беарден був досить ввічливим, але, враховуючи кількість голосів, що піднялися, я відчуваю необхідність чітко перелічити проблеми з цією відповіддю: 1) 1-й абзац, який, здається, дає вирішення проблеми ОП (параграф 4 із 5), це НЕ працює, тому що ОП є копіювання і перейменування в файл , а НЕ каталог; 2) посилання, подане вгорі відповіді, не забезпечує рішення; 3) твердження основного питання зовсім НЕ застосовується на питання ФП в; і 4) відповідь образлива, з криком у другому абзаці та образами в останньому. Можливо, він повинен був перечитати питання.
— GlennFromIowa

2
Всі відповіді, наведені тут, - скопіювати в каталог, а не копіювати в адресаті файлу, що можливо і без документації, дивіться іншу відповідь від zippycoder, chapluck, LBushkin
— pdem

27

Отже, для цього є просте виправлення. Це, правда, незручно, але це працює. xcopy не запропонує з’ясувати, чи є адресою каталог чи файл, якщо новий файл (назва файлу) вже існує. Якщо ви передуєте команді xcopy простим відлунням до нового імені файлу, він замінить порожній файл. Приклад

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y

6

Це з відповіді на векселі.

Просто, щоб бути дійсно зрозумілим для інших.

Якщо ви копіюєте ОДИН файл з одного місця в інший І хочете створити повну структуру каталогу, скористайтеся такою командою:

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\" 

Так, поставте зворотну косу риску в кінці імені файлу, і вона НЕ запитає вас, чи це файл чи каталог. Оскільки у джерелі є лише ОДИН файл, він вважатиме, що це файл.


12
Це неправильно. Під час запуску "xcopy versionBase.txt asd \ versionBase.txt \" і каталогу asd немає, я отримую файл asd \ versionBase.txt \ versionBase.txt.
— Крістіан Нікулеску

1
Як і інші відповіді на цій сторінці, ця публікація не стосується початкового питання. Питання полягало в тому, як скопіювати І перейменувати (за один крок) файл. Як і в інших, мабуть, заплутаних відповідях, тут йдеться про те, як скопіювати файл БЕЗ перейменування.
— М.Беарден

Не кажучи вже про те, що він справді створює каталог з таким іменем, а не папку. Перевірте це, а потім запустіть режисер, і ви побачите щось подібне: dir "C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
— GlennFromIowa

3

xcopy src dest /I

REM This assumes dest is a folder and will create it, if it doesnt exists


2

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

type filename.txt > destfolder\destfilename.txt

працює відповідно до моїх вимог.


2

Повернутися до початкового питання:

 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\"

дійсно існує.


Цікаве виправлення, якщо каталог не існує. На жаль, наступний рядок (на моєму тестуванні) все ще спонукає користувача.
— GlennFromIowa

Ви маєте рацію, ви маєте xcopy "bin \ development \ whee.config.example" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config \". Я скористався своїм підходом, щоб скопіювати файли в диспут, який може не існувати. Для перейменування це виглядає так, як зворотний нахил потрібно додати в кінці.
— grenix

2

XCOPY з * в кінці цілі, щоб скопіювати файли, чи існують вони в цільовому пункті, XCOPY з \ в кінці цілі, щоб скопіювати папки та вміст, існують чи не в цільовому пункті

Як варіант

RoboForm SOURCE DEST FILE для файлів RoboForm SOURCE DEST для папок


1

Я пропоную robocopyзамість copyабо xcopy. Використовується як команда або в GUI на клієнтах або серверах. Толерантний до мережевих пауз і ви можете ігнорувати атрибути файлів при копіюванні копії за атрибутами файлів. Ну, і він підтримує багатоядерні машини, тому файли копіюються набагато швидше "паралельно" один одному, а не послідовно. robocopyможна знайти на MS TechNet.


2
Я весь час використовую робокопію. Однак для цього плаката питання не спрацює, оскільки не може перейменувати файли. Щось я не знав раніше, це те, що у xcopy є перемикач / z, який терпимо ставиться до мережевих пауз!
— GlennFromIowa

1

Правильна річ, якщо ви хочете скопіювати лише файл та змінити ім'я за адресою:

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

І це добре працює


1

Для дублювання великих файлів хороший вибір - 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

Завдяки Chand з невеликими модифікаціями: https://stackoverflow.com/users/3705330/chand


0

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

наприклад, скопіюйте "bin \ development \ whee.config.example" "TestConnectionExternal \ bin \ Debug \ whee.config"


1
Я намагаюся скопіювати файл у ту саму папку з іншим іменем, а xcopy не може працювати. Я використовую copy /Y source destinationдля передачі підтвердження перезапису.
— SandRock

0

Оскільки ви насправді не змінюєте ім’я файлу, ви можете вийняти ім'я файлу з пункту призначення, і питань не виникне.

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

Цей підхід добре працює, коли гарантовано існує каталог призначення та коли джерелом може бути однаково файл чи каталог.


1
@downvoters: Чому цю відповідь можна було б скасувати? В цьому контексті Debugкаталог, ймовірно, гарантовано існує.
— Jirka Hanika

4
У цій відповіді йдеться про те, що "ви фактично не змінюєте ім'я файлу", тоді як в первісному запитанні чітко сказано: "скопіюйте файл з одного каталогу в інший І ПОВЕРНУЙТЕСЯ ІТ в каталог призначення". Тож це видається неважливим для теми.
— М.Беарден

0

Попрацюйте навколо, використовуйте ReName ... та назвіть це якесь криптоване ім'я, а потім перейменуйте його на власне ім'я

C:

CD "C: \ Користувачі \ Громадські \ Документи \ Мої веб-сайти \ AngelFire ~ Zoe \"

XCopy / D / I / V / Y "C: \ Користувачі \ Загальні \ Документи \ Мої веб-сайти \ HostGator ~ ZoeBeans \ cop.htm"

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


0

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

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

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


Якщо припустити, що це спрацює у певному середовищі (тобто, певно, що ніколи не буде whee.config у вихідній папці), щоб повторити код OP, чи не повинно він включати перейменування назад до початкового імені? ren "bin\development\whee.config" whee.config.example
— GlennFromIowa

0

Помістіть зірочку (*) в кінці шляху призначення, щоб пропустити суперечку D і F.

Приклад:

xcopy "compressionOutput.xml" "../../Eeecute Scripts / APIAutomation / Бібліотеки / rerunlastfailedbuild.xml *"



0

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

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y

Це працює як шарм, THX
— E.Big

-2

Ви не можете вказати, що це завжди файл. Якщо вам не потрібні інші функції xcopy, чому б просто не використовувати звичайні copy?


5
Однією з причин є те copy, що , будучи внутрішньою командою, не встановлює ErrorLevel. Якщо ви хочете мати можливість впливати на шлях пакетного файлу, якщо виникає помилка копіювання, вам потрібно скористатися XCOPY.
— rossmcm

2
Ще одна причина, якщо ви хочете використовувати інші функції xcopy, наприклад / d
— Вікторія,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.