Как заархивировать список подпапок из текстового файла и включить имя родительской папки в имя файла?
У меня есть файл.txt, который содержит очень длинный сгенерированный список папок третьего уровня, для которых я хочу сжать содержимое каждой из них. Итак, упрощенный пример, это будет содержимое list.txt
F:\Folder\2005-05-11\[ABC #1] FolderA
F:\Folder\2005-05-11\[ABC #2] FolderB
F:\Folder\2005-05-26\[ABC #1] FolderA
Если я сделаю это
for /F "delims=" %%X in (list.txt) do "7z.exe" a -mx=0 "%%X.zip" "%%X\*"
Имя файла каждого почтового индекса - только заключительный каталог, который заархивирован. Так [ABC #1] FolderA.zip и так далее. Все эти почтовые индексы будут позже удалены из этого контекста, и поэтому мне нужно более четко назвать их.
В абсолютно идеальном мире я хотел бы, чтобы они взяли имя 2-го уровня (дату) и просто часть в квадратных скобках из последней папки (что всегда соответствует). Итак, 2015-05-11 [ABC #1].zip, но я не знаю, возможно ли это каким-то образом.
Поэтому, казалось бы, более простой вариант - просто включить этот родительский каталог в zip, так что 2005-05-11 [ABC #1] FolderA.zip, как я могу это сделать?
Очевидно, я использую 7zip в своем текущем скрипте, но если это проще с WinRAR или другим инструментом, то это нормально.
1 ответ
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q42060809.txt"
for /F "usebackqdelims=" %%X in ("%filename1%") do (
FOR /f %%d IN ("%%~dpX.") DO (
FOR /f "delims=[]" %%b IN ("%%~nX") DO (
ECHO("7z.exe" a -mx=0 "%%~dpX%%~nxd[%%b].zip" "%%X\*"
)
)
)
GOTO :EOF
Вам нужно будет изменить настройку sourcedir
в соответствии с вашими обстоятельствами.
Я использовал файл с именем q42060809.txt
содержащий ваши данные для моего тестирования.
Требуемые команды просто ECHO
Эд для тестирования. После того, как вы убедились, что команды верны, удалите ECHO(
на самом деле архивировать файлы.
Естественно, вам не нужно usebackq
если вы не "цитируете имя файла"
Шаг 2 - добавить .
к ~dp
части даты и пути %%X
, Результат в %%~nxd
это напряжение N eme и eX самого низкого уровня каталога.
Затем с ~n
(N ame) только часть %%X
, добавьте в скобки его в качестве разделителей, чтобы часть между скобками появилась в %%b
Затем смешайте и сопоставьте соответствующие элементы. Повторно вставьте скобки, если необходимо, и добавьте пробел перед открывающей скобкой, если это соответствует вашей фантазии...