Как скопировать файл в каталог в 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в заголовке / теле, вместе с окнами тегов и командной строкой (обратите внимание, что cmd.exe является синонимом тега командной строки ). Метка ms-dos должна быть удалена; и метка 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

Обратите внимание, что в конце пути назначения должен быть символ косой черты ``. В противном случае команда предложит пользователю указать, является ли пункт назначения каталогом или файлом, если он не существует.
— Лии

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*

РЕДАКТИРОВАТЬ: как указано @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 верно. Через несколько месяцев после того, как я написал это, я столкнулся с той же проблемой и выполнил решение "echo f", оно также отлично работает. Редактирование моего ответа ...
— 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.