Пакетный файл FOR Loop 7-Zip извлечь определенное расширение файла
Я пытаюсь создать командный файл для рекурсивного извлечения нескольких архивов в нескольких подкаталогах из исходного каталога в выходной каталог при сохранении структуры архивной папки. Приведенный ниже пример прекрасно работает, за исключением того, что мне нужно извлечь только один определенный тип файлов из каждого архива (т. Е. 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
Я искренне благодарен за помощь заранее, и любые тщательные ресурсы по пакетному написанию сценариев, на которые я мог бы быть направлен для будущих ссылок, также будут высоко оценены, поскольку я пытаюсь учиться.
1 ответ
Вы можете использовать -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> ::= @{listfile} | !{wildcard}
параметры
<recurse_type>
Указывает, как должны использоваться подстановочные знаки и имена файлов в этом ключе. Если эта опция не указана, будет использовано глобальное значение, назначенное параметром -r (Recurse). Для получения более подробной информации см. Спецификацию переключателя -r (Recurse).
<recurse_type> ::= r[- | 0]
<file_ref>
Задает имена файлов и подстановочные знаки или файл списка для файлов, которые будут обработаны.
<file_ref> ::= @{listfile} | !{wildcard} Option Description {listfile} Specifies name of list file. See List file description. {wildcard} Specifies wildcard or filename.
Примеры
7z a -tzip src.zip *.txt -ir!DIR1\*.cpp
добавляет в архив src.zip все файлы *.txt из текущего каталога и все файлы *.cpp из каталога DIR1 и из всех его подкаталогов.