Как скопировать файл в каталог в 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.