Вопрос или проблема
Мне нужно создать архив с несколькими файлами, расположенными в подкаталогах. Например:
- …/documents/offers/001.pdf
- …/documents/offers/002.pdf
- …/documents/drawings/001.dwg
- …/documents/drawings/002.dwg
Я хотел бы добавить файлы 001.pdf и 001.dwg, сохраняя структуру каталогов из директории, где хранится файл 7za.exe.
Файлы будут добавлены с использованием абсолютного пути (с использованием базы данных для архивации некоторых файлов)
Я проверил доступные ключи, но не нашел ничего, что описывает то, что я хочу сделать
Добавление каталога работает, но я не хочу все файлы, только некоторые из них.
Следующее использует команду Windows “forfiles” вместе с 7zip. Она захватывает все файлы в каталоге C:\yourPath (/s = рекурсивно), где дата равна или больше заданной даты (/d 01/18/2018). Параметр /m . говорит, что нужно рассматривать только файлы, а не каталоги, в отношении предельной даты. Параметр -spf сообщает 7zip, что вам нужен полный квалифицированный путь. (-spf доступен как минимум в версии 15 7zip). “@path” – это параметр, используемый forfiles для каждого найденного файла, который соответствует критериям.
forfiles /s /m *.* /p C:\yourPath /c “cmd /c 7z a -spf -t7z c:\yourArchive.7z @path” /d 01/18/2018
Ответ или решение
При работе с архивированием файлов с помощью 7-Zip вам может понадобиться сохранить относительные пути к файлам, которые вы хотите добавить в архив, сохраняя структуру каталогов. В этой статье мы рассмотрим, как это можно сделать, используя команду 7z для выбора конкретных файлов и сохранения относительных путей к ним.
Сохранение относительных путей при архивировании файлов с 7-Zip
Контекст задачи
Вы имеете дело с набором файлов, которые находятся в подкаталогах, и хотите создать архив, включающий только определенные файлы, при этом сохраняя оригинальную структуру каталогов. Ваш пример содержит следующие файлы:
.../documents/offers/001.pdf
.../documents/offers/002.pdf
.../documents/drawings/001.dwg
.../documents/drawings/002.dwg
Задача состоит в том, чтобы заархивировать файлы 001.pdf
и 001.dwg
, используя абсолютные пути, но сохраняя относительную структуру от каталога, в котором находится исполняемый файл 7za.exe.
Решение с использованием командной строки
-
Открытие командной строки: Запустите командную строку Windows от имени администратора.
-
Переход в каталог с 7za.exe: Используйте команду
cd
, чтобы перейти в каталог, в котором находится файл 7za.exe.cd C:\путь\к\каталогу\с\7za
-
Создание архива: Используйте команду
7z a
, чтобы создать архив, добавив нужные файлы. При этом важно указать путь к файлам с параметром-ir!
, который позволяет включать только указанные файлы, сохраняя относительные пути:7z a -t7z C:\путь\к\архиву\yourArchive.7z -ir!documents\offers\001.pdf -ir!documents\drawings\001.dwg -spf
В этом примере:
-t7z
указывает формат архива (7z).-ir!
позволяет указать, какие файлы нужно добавить, используя относительные пути.-spf
сохраняет полные пути к файлам в архиве.
Примечания
-
Использование флага
-spf
(сохранить полный путь файла) требует, чтобы структура каталогов в пути файлов была правильной относительно местоположения исполняемого файла7za.exe
. Убедитесь, что подкаталоги, указанные в относительных путях, присутствуют. -
Если вам нужно добавить более сложные условия (например, выбирать файлы по дате или определённым критериям), можете использовать условие
forfiles
вместе с 7-Zip, как оно было описано в вашем запросе.
Заключение
С помощью команды 7z
и соответствующих параметров вы можете эффективно создать архив с нужными вам файлами, сохраняя их относительные пути. Это позволяет значительно упростить управление файлами и обеспечивать их легкую доступность без необходимости повторного поиска по структуре каталогов. Если у вас есть дополнительные вопросы по работе с 7-Zip, не стесняйтесь задавать их.