2015-01-29 2 views
1

Мне нужно архивировать все файлы, но не папки, которые находятся внутри сложной структуры каталогов особым образом. Каждая подпапка (независимо от того, насколько глубоко в структуре) будет содержать zip-файл, содержащий все файлы, которые были там. Если я использую 7zip a -r -tzip files.zip \*.\*, это поместит всю структуру в один корневой файл (файлы и папки). Нехорошо.7zip рекурсивно архивирует файлы в папках

Решение представляет собой пакетный скрипт, который рекурсирует эту структуру, и для каждой папки, найденной для создания zip-файла и удаления исходных файлов. Но я знаю только, как создавать простые циклы, а не неограниченно, а не в неизвестной структуре каталогов.

Например: for /F "tokens=1" %%u in ('dir /b /ad parentfolder') do ( содержит только поддиректории первого уровня.

ответ

3

использование (1)FOR команды итерация (2) по всему IN (*)(3) каталогов /D, (4) рекурсивно /R
и (5) для каждого справочника foun d %%a, (6) применять DO(7) команда 7z создать почтовый (8) назван каталог %%~na.zip(9) включая все содержимое каталога %%a\*

for /r /d %%a in (*) do (
    7z a %%a\%%~na.zip %%a\* 
) 

необязательно, вы можете стереть содержимое каталога, за исключением недавно созданного архива, поместите другой FOR внутри предыдущего FOR, после 7z

for %%b in (*) do (
    if not %%b==%%~na.zip erase %%a\%%b 
) 
+0

замечательно! за работой. вы сохранили мой день –

+0

, почему сделать другой цикл из корня, когда я могу добавить инструкцию удаления сразу после создания zip? –

+0

, потому что вам нужно удалить все ** кроме ** самого zip –

Смежные вопросы