Як скопіювати файл у каталог у DOS та створити каталоги за необхідності?


37

Як можна скопіювати файл за допомогою команд DOS в структуру каталогу, яка ще може не існувати? Мені потрібно мати можливість примусити створити шлях до каталогу до місця розташування цільового файлу, якщо цього місцезнаходження ще не існує.

Наприклад, у цьому місці вже є file.txt:

C:\file.txt

І я хочу його скопіювати

C:\example\new\path\to\copy\of\file\file.txt

але в цей час

C:\example\

і всі підкаталоги можуть або можуть ще не існувати.

В основному, я шукаю команду "скопіювати та створити цільовий шлях, якщо потрібно". Що б ти порадив - це найкращий спосіб досягти цього?


Це питання насправді щодо DOS (або MS-DOS), чи йдеться про командний рядок, знайдений у версіях Windows на базі NT (2000, XP, Vista, 7, 8, Server)?
Боб

Я мав на увазі DOS-подібний Windows CLI. Що ви рекомендуєте, це найкращий спосіб описати "DOS-подібний Windows CLI" для назви посади?
nodmonkey

Як правило, я б використовував Windows command lineу заголовку / тілі разом з тегами windows та командний рядок (зауважте, що cmd.exe - синонім тегів командного рядка ). Тег ms-dos слід видалити; і теги дос не слід використовувати ні за яких обставин.
Боб

Однак у цьому випадку, якщо існуючі / прийняті відповіді призначені для DOS / MS-DOS, ви також можете залишити його таким, яким він є. Для подальшого ознайомлення DOS слід / слід інтерпретувати як операційну систему. Хоча командний рядок Windows заснований на них, є деякі помітні відмінності.
Боб

Ви можете назвати це запит cmd
barlop

Відповіді:


28

Так, це xcopy . Ось як це буде виглядати:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Інформація про XCOPY за адресою

Ви також можете заглянути в ROBOCOPY , у комплект ресурсів XP та стандарт у Vista, Windows 7 та Server 2008.

robocopy . c:\example\new\path\to\copy\of\file file.txt

3
xcopy чудово, якщо вам також не потрібно перейменовувати файл. У цьому випадку, на жаль, xcopy запитає вас, чи є адресою каталог чи ім'я файлу, і немає комутатора командного рядка, який би вказував "це файл".
RomanSt

4
Дивіться іншу відповідь - скористайтеся попередньою echo f | допомогою xcopy, щоб автоматично відповісти на це запит.
mcw0933

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

17

Я спробував використовувати щось на кшталт:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

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

https://stackoverflow.com/questions/4283312/batch-file-asks-for-file-or-folder

Що в основному додати "*" в кінці файлу призначення:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt*

EDIT: як вказує @romkyns, це може мати небажані результати, якщо у вас є файли з однаковою назвою плюс щось інше (наприклад, "file.txt.bak"). У тій же самій нитці, розміщеній вище, інше рішення, яке працює, - це передавання "echo f" до вашої команди:

echo f | xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Де слід замінити "f" на будь-який лист, який ваша система використовує для файлу, якщо ви використовуєте його іншою мовою.


1
Що працює, лише якщо file.txt.bakв каталозі його немає. Однак це може спрацювати в деяких сценаріях.
RomanSt

@romkyns правда. через кілька місяців після того, як я опублікував це, я зіткнувся з тією ж проблемою і зробив рішення "відлуння", воно також чудово працює. Редагування моєї відповіді ...
msb

1
З цим echo f | , вам більше не потрібен трейлінг *.
mcw0933

1
Друге ім'я файлу є зайвим у випадку, якщо воно однакове. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" буде працювати до тих пір, поки в каталозі є кінцевий косої риски (інакше він запитує, чи мається на увазі чи файл, чи каталог) .
FourtyTwo


0

Використовуйте copyчи xCopy, щоб уникнути помилки copyчи підказки xCopy, протестуйте наявність необхідної папки та створіть її при необхідності:

if not exist "NewPath" MkDir "NewPath"
copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

або об'єднати команди з &&одним командним рядком:

if not exist "NewPath" MkDir "NewPath" && copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

Те ж саме можна зробити і moveзамість copy. Я дізнався про цю техніку від StackOverflow відповіді про те , як зробити це з move.

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