Скопировать подпапки и их содержимое на один уровень?

461
user9687306

Прямо сейчас у меня есть следующая структура

Folder 1\  -Apr2007\folder 1 \folder 2 \folder 3 -May 2007\folder 23 \folder 24 \folder 25 -June 2007 \folder 41 \folder 42 \folder 43  -etc all the way to 2018 

Как я могу скопировать подпапки и их содержимое по месяцам, чтобы они все были в одном каталоге? Я пытался использовать команду For / f, но я не знаю, как указать в ней 2 символа подстановки. Мне нужен подстановочный знак для месяца, а также один для имени подпапки, так как они все разные.

Я хотел бы следующий вывод:

New folder\ folder 1\ folder 2\ folder 3\ folder 23\ folder 24\ folder 25\ folder 41\ folder 42\ folder 43\ 
1
Итак, вы просите, чтобы все `~ / `подпапки с именами, такими как` / folder <##> `, чтобы все вместо них были скопированы в другую и определенную папку? Pimp Juice IT 5 лет назад 0
Ну, я хочу взять папку под папкой месяца и переместить ее в другое место со всем ее содержимым. Или переместите его на один уровень вверх, если это проще. user9687306 5 лет назад 0
Я думал о чем-то похожем на то, что указал AFH в своем ответе. Попробуйте и посмотрите, будет ли этого достаточно для ваших нужд, я скоро вернусь, так как у меня есть проблема, над которой я сейчас работаю. Pimp Juice IT 5 лет назад 0

1 ответ на вопрос

1
AFH

Вам просто нужно две вложенные forциклы: -

for /d %d in ("\Full\Path\To\Folder 1"\*) do ( cd "%d" & for /d %s in (*) do xcopy /s "%s"\* "\Full\Path\To\New folder\%s"\ ) 

Если вы поместите его в пакетный файл, вам нужно удвоить %знаки.

Использование cd- это один из вариантов, но вы также можете использовать полные пути к каталогам, хотя для определения целевого пути потребуется разбор переменных.

Могу ли я использовать переменную для папки 1? Есть около 60 папок и 50 000 подпапок. Я не хотел бы упоминать точные имена папок в команде. user9687306 5 лет назад 0
Да, конечно, вы можете, либо для имени папки или полного пути. В пакетном файле это может быть параметр, как и папка назначения. Вы можете добавить проверки, что папка назначения еще не существует, или если вы хотите объединить существующую папку, чтобы вы не перезаписывали существующие файлы. AFH 5 лет назад 0
Это похоже на работу. Допустим, мне нужно будет скопировать 15 000 указанных папок, есть ли способ предоставить список имен папок для копирования и, если имя папки совпадает, он будет копировать эти папки? Я знаю, что вы можете использовать список исключений с xcopy, но мне нужен список включения вместо списка исключений, если это имеет смысл. user9687306 5 лет назад 0
Да, вы можете сделать это, добавив `findstr` для каждого подкаталога (`% s`), чтобы проверить, находится ли он в списке каталогов, но вы значительно меняете свой вопрос, и я не могу дать вам больше информации, если вы не предоставите намного больше деталей о том, что вы хотите, в том числе формат списка имен каталогов. AFH 5 лет назад 0
У меня есть список папок в виде текстового файла, сгенерированного программным обеспечением с именем папки в каждой строке без указания пути к каждой папке, и мне нужна команда для просмотра этого текстового файла и копирования соответствующих папок в новое место. user9687306 5 лет назад 0
Какая доля папок будет в списке? Это определит, будет ли более эффективным проходить по списку и искать каждую папку или находить все папки и проверять, есть ли каждая из них в списке. AFH 5 лет назад 0
Все имя папки будет в списке. user9687306 5 лет назад 0
Вы можете использовать `for / f" delims = "% d в ('type DirList.txt') do xcopy ...`. Вам нужно будет проанализировать `% d` в команде` xcopy`, в зависимости от формата списка. AFH 5 лет назад 0
Не могли бы вы дать мне больше информации о том, как анализировать переменную? как пример того, как выглядит вся команда? user9687306 5 лет назад 0
Введите `for /?`, Чтобы получить список параметров синтаксического анализа в конце текста справки. Поскольку вы не привели пример точного формата файла списка каталогов, я не могу привести полезный пример строки разбора, но вы должны иметь возможность разобраться с ней из информации `for /?`. AFH 5 лет назад 0
Текстовый файл будет выглядеть следующим образом (одна запись в строке, не все рядом друг с другом): 12134 57896 45789 69875 74514 и т. Д. Эти числа являются именами папок, и их около 15 000. user9687306 5 лет назад 0
Это противоречит вашему предыдущему утверждению: «Все имя папки будет в списке». Вы знаете формат, так почему вы не можете найти ответ на основании имеющейся у вас информации? AFH 5 лет назад 0
Это потому, что я не очень понимаю команду. Я запускаю его и вижу результаты, но не совсем понимаю, как написать это самостоятельно. спасибо за вашу помощь, это очень ценится. user9687306 5 лет назад 0
Поэтому мне удалось заставить его работать с помощью этой команды: FOR / F% F IN (folderlist.txt) DO xcopy / I / E "pathrofoldersource \% F" "pathtocopysource \% F" Есть ли способ, которым я могу применить эту команду но я хочу скопировать только папку на самом низком уровне 2 уровня hiearchy? D: \ System \ Jan2018 \ Folder1-120000 D: \ System \ Feb2018 \ Folder1-120000 Поэтому в основном я хочу, чтобы команда скопировала папки, указанные в текстовом файле, которые перечислены в структуре 1-120 000 в папках месяца, но Мне также нужно указать переменную для папки месяца, так что-то вроде user9687306 5 лет назад 0
Похоже, что вы исчерпали пространство в вашем комментарии. Я ждал, когда вы закончите, это не имеет смысла, поскольку мой ответ, кажется, делает то, что вы хотите, кроме текстового файла, который вы с тех пор представили. Пожалуйста, обновите ваш вопрос, чтобы объяснить формат текстового файла и его связь с действующими каталогами. AFH 5 лет назад 0

Похожие вопросы