Я пытаюсь создать командный файл для рекурсивного извлечения нескольких архивов в нескольких подкаталогах из исходного каталога в выходной каталог при сохранении структуры архивной папки. Приведенный ниже пример отлично работает, за исключением того, что мне нужно извлечь только один определенный тип файла из каждого архива (т. Е. .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 ответ1

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 и из всех его подкаталогов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .