7zip에서 선택한 각 파일 / 디렉토리에 대해 별도의 zip 파일을 작성하는 방법


30

이것은 Total Commander의 내부 zip packer입니다.

Total Commander zip packer 대화 상자 그림.

그러나 7zip packer를 사용하고 싶습니다. 5 개의 파일을 선택하면 선택한 각 파일에 대해 5 개의 개별 .zip 아카이브가 제공됩니다. 7zip으로 어떻게합니까?

답변:


54

그래픽 사용자 인터페이스를 사용하여 제안하는 것을 수행 할 수 있는지 확실하지 않지만 명령 줄에서 확실하게 할 수 있습니다.

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

먼저 디렉토리 ( cd명령)를 디렉토리로 변경 F:\Downloads하거나 대량 압축을 수행하려는 디렉토리 를 변경해야합니다 . 또한 * .exe 또는 해당 문서를 압축하기 위해 필터링하려는 확장명을 쉽게 대체 할 수 있습니다.

그리고 비밀 디코더 링 :

  • %i 루프의 각 단계에 대한 파일 이름을 보유하는 변수입니다.
  • (*.*) 선택 기준이며 쉽게 * .exe 또는 유사 할 수 있습니다.
  • 7z.exe 7-Zip의 명령 행 버전입니다.
  • %~ni -이것은 % i 변수를 파일 이름으로 확장합니다-확장자 없음

주어진 디렉토리에 대한 폴더를 추가하고 싶다면, 명령은 기본적으로 파일과 함께 작동하는 것처럼 조금 더 복잡합니다. 추가 정보를 제공해야합니다.

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

이것은 마술처럼 보이는 몇 가지 부분 때문에 작동합니다.

  • /F FOR에게 ()의 확장 값을 반복하도록 지시합니다.
  • usebackq 내가 명령을 전달하고 출력을 반복 할 것이라고 FOR에게 알려줍니다.
  • delims=?FOR ?는 파일 이름과 디렉토리의 불법 문자에서 토큰을 분리하고 싶다고 말합니다 . 하나의 토큰 만 원합니다.
  • /B에서은 DIR을위한 베어 형식 이름 만 -
  • /A:D에서이 DIR속성을 기준으로 결과를 제한하는 것입니다의 D 디렉토리입니다

이것을 배치 파일 내부에 캡슐화하려면 % i 변수를 두 번 이스케이프해야합니다.

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"

네, 당신을 제외하고는 7z 아카이브입니다, 나는 zip 아카이브를 원합니다! 그렇다면 % ~ ni.zip?
Grumpy ol 'Bear

더 나은 아직, 나는 매우 압축 압축 또는 7z를 원합니다. 그리고 d : \ packed에 포장하십시오. 그러나 지금까지 방법이 작동합니다!
Grumpy ol 'Bear

1
감사합니다! % i IN ( . )의 경우 7z.exe "i : \ packed \ % ~ ni.7z" "% i"-mx9
Grumpy ol 'Bear

그건 그렇고, 배치 파일로 어떻게하는지 보여 줄 수 있습니까? 즉 sperate-archive.bat
Grumpy ol 'Bear

감사합니다. 스크립트에 전체 폴더를 어떻게 추가합니까?
Grumpy ol 'Bear

15

Goyuix의 답변이 마음에 듭니다. 그러나 Windows 7을 사용 중이거나 Power Shell이 ​​설치되어 있고 명령 줄 버전 7-zip, 7za.exe를 사용하는 경우 다음 명령을 실행할 수 있습니다.

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

"dir"을 "dir * .exe"로 변경하여 실행 파일 만 선택할 수도 있습니다.

Power Shell의 한 가지 좋은 점은 문자열 대신 객체로 작업하고 있다는 것입니다. 당신이 원한다면 정말 구체적으로 얻을 수 있습니다. 예를 들면 다음과 같습니다.

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

여기에는 다음과 같은 파일 만 포함됩니다.

  1. CSV 확장자를 가짐
  2. 크기가 18,900 바이트 미만
  3. 2011 년 7 월 1 일 이후에 마지막으로 수정 된 날짜

편집 7-zip 파일 대신 zip 파일을 원하면 InfoZip의 zip.exe를 대신 사용하십시오.


4
7-zip은 또한 zip 파일을 만들 수 있습니다. -t 플래그를 살펴보십시오. 예 :7z a -tzip archive.zip *.exe
Goyuix

좋아, $ _. BaseName $ _. Name은 작동하지만 다른 드라이브의 다른 디렉토리에서 $ _. BaseName $ _. Name을 어떻게 수행합니까? f : \ test \ file1.7z 등을 말하십시오.
Grumpy ol 'Bear

0

Total Commander 용 7zip 플러그인은 http://www.ghisler.com/plugins.htm 에서 다운로드하여 설치할 수 있습니다. 스크린 샷에서 창 오른쪽에 7zip 압축을위한 다른 선택 사항이 있습니다. 이 옵션을 사용하면 원하는 것을 정확하게 얻을 수 있습니다.


0

방금이 문제를 해결하기 위해 노력해 왔으며 내가 찾은 문제 중 하나는 아카이브 내의 폴더 이름 복제입니다. 즉, "foo"라는 폴더를 압축 할 때 포함하는 파일 .\foo\fighters.txt대신 "foo"라는 폴더 가 생성됩니다 fighters.txt.

따라서 답은 처리중인 디렉토리로 이동하여 아카이브를 이전 (루트) 디렉토리에 표시 한 다음 해당 디렉토리로 돌아가서 다음 폴더를 처리하는 것입니다.

7ZIP가 루트 디렉토리 내의 기존 ZIP 및 CMD 파일을 무시하여 아카이브 내에서 종료되지 않도록 -x!*.zip및 따라서 -x!*.cmd제외 인수 를 갖는 것도 중요합니다 .

이 스크립트는 또한 재귀 폴더 구조를 유지합니다.

@echo off

REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal

if exist *.zip goto zip_exist

for /d %%X in (*) do (
    cls
    cd /D %%X
    "e:\Program Files\7-Zip\7z.exe" a -r  -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
    cd ..
)
goto end

:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.

:end
pause

위의 코드는 "compress_dirs.cmd"와 같은 배치 파일로 복사하고 압축하려는 폴더가있는 디렉토리에서 관리자로 실행해야합니다.

이것이 도움이되기를 바랍니다.


0

폴더 구조를 유지하고 각 파일을 자체 구조로 저장해야하는 경우 다음을 시도하십시오.

이 명령을 확장자가 .bat 인 파일에 저장하고 압축해야하는 폴더에 넣으십시오.

FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel

노트 :

-sdel : 원본 파일을 삭제합니다 (압축 파일 만 유지하려는 경우 선택 사항).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.