Как я извлекаю все zip-файлы в подпапках, использующих С 7 zip в Windows 7

У меня есть большая древовидная структура папки Windows 7, содержащая много zip-файлов. Это одноуровневые zip-файлы (не ZIP в ZIP). Какую команду С 7 zip я могу использовать для парсинга через эту структуру папок, найдите каждого zip-файлом расширением файла (см. пример), извлеките его (удаление zip-файла, оставив извлеченные файлы) к тому же местоположению?

Пример: Все файлы в иерархии папок называют чем-то как: abc.mp3.zip или xyz.jpg.zip - собственное расширение файла, сопровождаемое ".zip". Я хочу С 7 zip найти все файлы в дереве расширением файла с помощью подстановочных знаков (*.mp3.zip, *.jpg.zip, и т.д.) и извлечь их к текущему местоположению, не создавая новые папки так, чтобы результатом был abc.mp3 и xyz.jpg.

2
задан 06.04.2016, 20:11

1 ответ

Насколько я могу сказать, с 7 zip не имеет команды, которая делает то, что Вы ищете. Вот сценарий пакетного файла Windows, который я думаю, сделает то, что Вы хотите. Это должно быть выполнено из командной строки, таким образом, можно предоставить путь к корню дерева папки, которое будет обработано.

Файл unzipper.bat

@echo off
setlocal
if "%1"=="" goto Usage

call :Get7zCmd
:: Recurse folder passed in as paramater
for /r %1 %%Z in (*.zip) do (
    echo ====
    rem Change to the directory of zip file
    cd /d "%%~dpZ"
    rem Extract all files to current directory
    echo %_7zCmd% e "%%~nxZ" -y
    rem Delete the zip file
    echo del "%%~nxZ"
)
goto End

:Usage
echo.
echo Parses through folder structure starting at the specified path, finding
echo and extracting the contents of all zip files found, and then deletes
echo the zip file.
echo.
echo Usage:
echo     %~n0 root-directory-path
echo.
echo     For example:
echo.
echo %~n0 "D:\some folder"

:End
goto :EOF

:: ==========================
:: Subroutine Get7zCmd
:: Determines the full path to 7-zip command-line executable from the Windows
:: Registry and sets the variable "_7zCmd" to the result.
:Get7zCmd
set Reg.Key=HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe
set Reg.Val=Path
for /F "Tokens=2*" %%A in ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| find /I "%Reg.Val%"') do call set PathDirectory=%%B
set _7zCmd="%PathDirectory%%\7z.exe"
exit /b 0

Так как в целом то, что делает сценарий, является довольно радикальным и потенциально разрушительным, потому что он мог бы извлечь большие количества файла и удалить много zip-файлов позже, я отключил команды на строках 12 и 14, который сделал бы те вещи путем добавления префикса их echo. Это делает их просто распечатать то, что они сделали бы если echo не был ли. Тем путем можно протестировать сценарий сначала, не нанося ущерба файловой системе, должна там быть своего рода неожиданная проблема.

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

2
ответ дан 09.01.2020, 03:22

Теги

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