답변:
그래픽 사용자 인터페이스를 사용하여 제안하는 것을 수행 할 수 있는지 확실하지 않지만 명령 줄에서 확실하게 할 수 있습니다.
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"
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 }
여기에는 다음과 같은 파일 만 포함됩니다.
편집 7-zip 파일 대신 zip 파일을 원하면 InfoZip의 zip.exe를 대신 사용하십시오.
7z a -tzip archive.zip *.exe
Total Commander 용 7zip 플러그인은 http://www.ghisler.com/plugins.htm 에서 다운로드하여 설치할 수 있습니다. 스크린 샷에서 창 오른쪽에 7zip 압축을위한 다른 선택 사항이 있습니다. 이 옵션을 사용하면 원하는 것을 정확하게 얻을 수 있습니다.
방금이 문제를 해결하기 위해 노력해 왔으며 내가 찾은 문제 중 하나는 아카이브 내의 폴더 이름 복제입니다. 즉, "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"와 같은 배치 파일로 복사하고 압축하려는 폴더가있는 디렉토리에서 관리자로 실행해야합니다.
이것이 도움이되기를 바랍니다.