Пакетный файл FOR Loop 7-Zip извлечь определенное расширение файла

471
MorbidEden

Я пытаюсь создать командный файл для рекурсивного извлечения нескольких архивов в нескольких подкаталогах из исходного каталога в выходной каталог при сохранении структуры архивной папки. Приведенный ниже пример прекрасно работает, за исключением того, что мне нужно извлекать только один определенный тип файлов из каждого архива (т. Е. TXT. DOC, PDF и т. Д.). Что мне нужно изменить, чтобы эта работа работала?

@ECHO ON  SET source=C:\Users\user\Desktop\test FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" PAUSE 

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

0
@Worthwelle: здесь написано [tag: windows] [tag: batch-file], а не [tag: linux] [tag: shell-script]. `#` не является * допустимым символом комментария. Вместо этого либо используйте команду `REM`, либо начните строку с` :: `(или вы можете просто удалить ошибочные строки). 3D1T0R 6 лет назад 0
Да, мне удалось запутаться. Давайте попробуем это снова: если вам нужно только извлечь файлы `* .7z`, то вы можете закомментировать (используя` :: `или` REM`) или удалить первый и третий циклы `FOR` (строки 4 и 6) , Worthwelle 6 лет назад 0
Мои извенения. Я должен был сформулировать себя лучше. Я хочу, чтобы каждое расширение архива, как указано выше, но мне нужно, чтобы из каждого архива было извлечено только один тип файла, т.е. .txt, .doc и т. Д. MorbidEden 6 лет назад 0

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

1
Worthwelle

Вы можете использовать -iпереключатель с 7-Zip для этого. Например, следующая модификация вашего командного файла будет извлекать только.txt файлы.

@ECHO ON  SET source=C:\Users\user\Desktop\test FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt PAUSE 

Вот еще немного информации из документации :

-i (Включить имена файлов) переключатель

Определяет дополнительные имена файлов и символы подстановки.

Поддерживаются несколько включаемых ключей.

Синтаксис

-i[<recurse_type>]<file_ref>  <recurse_type> ::= r[- | 0] <file_ref> ::= @ | ! 

параметры

<recurse_type>

Указывает, как подстановочные знаки и имена файлов в этом ключе должны использоваться. Если эта опция не указана, будет использовано глобальное значение, назначенное параметром -r (Recurse). Для получения дополнительной информации см. Спецификацию переключателя -r (Recurse).

<recurse_type> ::= r[- | 0] 

<file_ref>

Задает имена файлов и подстановочные знаки или файл списка для файлов, которые будут обрабатываться.

<file_ref> ::= @ | !  Option Description Specifies name of list file. See List file description. Specifies wildcard or filename. 

Примеры

7z a -tzip src.zip *.txt -ir!DIR1\*.cpp 

добавляет в архив src.zip все файлы * .txt из текущего каталога и все файлы * .cpp из каталога DIR1 и из всех его подкаталогов.

Отлично! Огромное спасибо. MorbidEden 6 лет назад 0

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