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.