폴더의 하위 디렉토리에 포함 된 여러 아카이브를 추출하여 아카이브가있는 폴더로 결과를 다시 출력하는 방법.
먼저 7-Zip 을 설치하십시오.
내부에 아카이브가있는 많은 서브 디렉토리를 포함하는 디렉토리의 루트에 bat
파일을 작성하십시오. 그런 다음 다음을 붙여 넣습니다.
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.Zip) DO (
"C:\Program Files\7-Zip\7z.exe" x "%%X"
)
popd
)
방망이를 시작하면 모든 rar/zip이 포함 된 폴더로 추출됩니다.
어떻게 작동합니까?
FOR/D/r %% F in ( "*") DO (
루프가 현재 디렉토리의 모든 폴더를 반복하고 경로를 변수
%%F
에 넣습니다.
% CD % 푸시
현재 디렉토리를 메모리에 넣습니다.
cd %% F
%%F
변수의 폴더를 현재 디렉토리로 설정하십시오.
FOR %%X in (*.rar *.Zip) DO (
현재 폴더의 모든
rar
및Zip
파일에 대해 다음을 수행하십시오.
"C:\Program Files\7-Zip\7z.exe" x "%%X"
파일에서 7-Zip을 실행하십시오. 일부 파일 이름에는 공백이 있기 때문에
%%X
주위에 따옴표가 필요합니다.
popd
이전에 메모리에 저장했던 이전 디렉토리로 돌아갑니다.
이것이 누군가에게 유용하기를 바랍니다.
Windows Vista에서 스크립트를 실행하는 데 문제가있었습니다. 코드를 실행했을 때 아무 일도 일어나지 않았습니다. 스크립트를 실행하려면 관리자 여야했습니다. .bat 파일을 마우스 오른쪽 단추로 클릭하고 "관리자 권한으로 실행"을 실행하면 어떤 이유로 든 system32 폴더에서 시작 되었기 때문에 작동하지 않았습니다 (정확하게 기억하는 경우). 이 문제를 해결하려면 Windows 환경 변수 (여기 설명 : Windows 환경 변수 ) % ~ dp0을 사용하여 스크립트가 실행 된 디렉토리로 다시 전환하십시오.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.Zip) DO (
"C:\Program Files\7-Zip\7z.exe" x %%X
)
popd
)
* .rar 또는 * .Zip 파일이 스크립트와 동일한 레벨에 있지 않은지 확인하십시오. 그들은 한 수준 아래로 있어야합니다.
이 의견이 누군가에게 도움이 되었기를 바랍니다.
그러나 위의 답변은 작동하지만 Windows 64-bit
및 7-Zip 32-bit
를 실행중인 경우 7-Zip의 올바른 경로는 C:\Program Files (x86)\7-Zip
입니다. 아래는 나를 위해 일한 스크립트입니다.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
FOR %%X in (*.rar *.Zip) DO (
"C:\Program Files (x86)\7-Zip\7z.exe" x %%X
)
popd
)
find . -name "*.Zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
현재 디렉토리에서 재귀 검색을 시작하고 .Zip으로 끝나는 모든 파일을 찾은 다음 루프로 파이프합니다. 찾은 모든 파일에 대해 출력이 파일의 디렉토리로 분류 된 상태로 파일에서 unzip 명령을 실행합니다.