Windows 7에서 7-Zip을 사용하여 하위 폴더의 모든 ZIP 파일을 추출하는 방법

Windows 7에서 7-Zip을 사용하여 하위 폴더의 모든 ZIP 파일을 추출하는 방법

나는 많은 항목을 포함하는 대규모 Windows 7 폴더 트리 구조를 가지고 있습니다.지퍼파일. 이는 단일 레이어 ZIP 파일입니다(ZIP 내의 ZIP 파일 아님). 이 폴더 구조를 분석하고, 파일 확장자별로 각 ZIP 파일을 찾고(예제 참조), 동일한 위치에 압축을 풀기(ZIP 파일 삭제, 추출된 파일은 남겨두기) 위해 어떤 7-Zip 명령을 사용할 수 있습니까?

예: 폴더 계층 구조에 있는 모든 파일의 이름은 다음과 같습니다: abc.mp3.zip 또는 xyz.jpg.zip - 기본 파일 확장자 뒤에 ".zip"이 옵니다. 7-Zip이 와일드카드(*.mp3.zip, *.jpg.zip 등)를 사용하여 파일 확장자별로 트리의 모든 파일을 찾고 새 폴더를 만들지 않고 이를 현재 위치에 추출하여 결과가 abc가 되도록 하고 싶습니다. mp3 및 xyz.jpg.

답변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실제로 이러한 작업을 수행하는 스크립트를 수정하려면 두 줄 각각에서 를 제거해야 합니다 . 물론 모든 책임에 대한 표준 면책조항이 적용됩니다.

관련 정보