Как я могу переместить содержимое одного дерева каталогов в другое? - PullRequest
19 голосов
/ 13 июля 2009

У меня есть каталог, который содержит файлы и несколько уровней подкаталогов:

C:\Source

Я бы хотел переместить содержимое C: \ Source в:

C:\Destination

Требования:

  • Все файлы и все подкаталоги в C: \ SourceData необходимо переместить
  • Я буду выполнять команду в пакетный файл
  • Я не могу использовать Powershell или любые другие скриптовые языки

Попытка 0

XCOPY /E "C:\Source" "C:\Destination"

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

Попытка 1

MOVE "C:\Source" "C:\Destination"

Это перемещает весь каталог C: \ Source в C: \ Destination, поэтому я получаю:

C:\Destination\Source

Попытка 2

С некоторой помощью этот вопрос и принятый ответ Я придумал:

for /r "C:\Source" %%x in (*) do move "%%x" "C:\Destination"

При этом перемещаются файлы в C: \ Source, но не подкаталоги или их содержимое. Обратите внимание, что я использовал %% x вместо% x, так как использую его в командном файле.

Использование FOR кажется многообещающим, но я не уверен, что использовал правильный синтаксис? Я что-то пропустил?

Попытка 3

Как подсказал Ник D, я попытался переименовать:

ПЕРЕИМЕНОВАТЬ "C: \ Source" Пункт назначения

Для примера сценария, который я дал, это работает нормально. К сожалению, мой настоящий каталог Destination находится на другом уровне, чем каталог Source , и это не поддерживается:

C:\>REN /?
Renames a file or files.

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

Note that you cannot specify a new drive or path for your destination file.

Я получаю "Синтаксис команды неверен". ошибки, если я пытаюсь указать более сложный путь назначения, например:

RENAME "C:\Source" "C:\MyOtherDirectory\Destination"
RENAME "C:\Source" "MyOtherDirectory\Destination"

Ответы [ 13 ]

0 голосов
/ 10 сентября 2015

Я использую утилиту под названием xxcopy. Он может перемещать файлы и иметь много полезных опций, вы можете использовать его так:

xxcopy C:\Source C:\Destination /E /RC

варианты:

  • / E для копирования всего, даже пустых папок

  • / RC для удаления каждого исходного файла после каждой успешной копии

Вы можете скачать бесплатную копию xxcopy для личного пользования с: http://www.xxcopy.com/xcpydnld.htm

0 голосов
/ 27 мая 2011

Если все, что вы пытаетесь сделать, это переместить каталог и содержимое на один уровень выше:

MOVE folder_you_wan_to_move ..

Обратите внимание, что .. относится к следующему каталогу вверх.

0 голосов
/ 13 июля 2009

Я думаю, что самое простое, что вы можете сделать, это изменить вашу попытку 2

от

MOVE "C:\Source" "C:\Destination"

до

MOVE "C:\Source\*" "C:\Destination"

KISS; -)

Редактировать : похоже, это не работает, поэтому мой совет - убрать дрянную командную строку DOS и использовать Cygwin с BASH в качестве оболочки! (или просто добавьте к пути двоичные файлы cygwin, чтобы вы могли использовать mv в DOS, таким образом, не нужно менять оболочку в соответствии с вашими требованиями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...