Windows의 내장 기능 만 사용하여 스크립트에서 압축 또는 압축 해제를 어떻게 할 수 있습니까?


294

Windows에서는 다음과 같은 방법으로 일부 파일을 압축 할 수 있습니다

마우스 오른쪽 버튼을 클릭 → 보내기압축 (압축) 폴더

.zip파일 을 두 번 클릭하여 압축을 풀고 파일을 추출하십시오.

타사 소프트웨어를 설치할 필요없이 스크립트 (.bat 파일)에서 이러한 기능을 적용하는 방법이 있습니까?



16
아마도 배치 파일이나 프로그램에서 호출하기 때문일 것입니다. (내가 여기 왜의는 - 그것은 zip 파일로 필요로하는 웹 사이트에 대한 작은 제품 "빌드"에 대한 빠른 .BAT 파일을 만들려고 노력.)
존 쿰즈

46
이 질문이 닫히는 것을 미쳤다.
Sam Goldberg

1
이 질문을 슈퍼 유저로 옮길 수 있습니까?
Hanxue

21

답변:


82

2013 년에는 불가능했습니다. Microsoft는 이에 대한 실행 파일을 제공하지 않았습니다.

이 작업을 수행하는 VBS 방법은이 링크를 참조하십시오. /superuser/201371/create-zip-folder-from-the-command-line-windows

Windows 8부터는 .NET Framework 4.5가 기본적으로 설치되며 System.IO.Compression.ZipArchive 및 PowerShell을 사용할 수 있으며 스크립트를 작성할 수 있습니다 ( https://stackoverflow.com/a/26843122/71312 참조).


1
PS가이를 허용하고 Windows에 사전 설치되어 있으며 명령 줄을 통해 사용할 수 있다는 점을 감안하면 올바르지 않습니다.
Dan Atkinson

4
@DanAtkinson이 업데이트되었습니다. 이 링크는 2013 년에 답변을 받았으며이 링크는 VBS 방식을 제공했습니다. PS 방식에는 Windows 8 이상이 필요한 .Net 4.5가 필요합니다.
Diryboy

업데이트 해 주셔서 감사합니다! 이에 따라 내 투표를 수정했습니다. :)
Dan Atkinson

6
@MichaelMrozek 음 "명령 줄"은 일반적으로 CMD / COMMAND가 아닌 모든 명령 줄을 의미하며 PS는 * nix의 bash, sh, rsh와 마찬가지로 명령 줄입니다. 그러나 명령 줄에서 powershell을 실행할 수 있으므로 cmd / command가 유일한 명령 줄이라고 믿더라도 질문에 대답합니다.
Robert McKee

1
그것은 이었다 (어떤 추가 소프트웨어를 설치하지 않고) 2013 년, 백. 수퍼 유저 질문을 참조하십시오 . Windows XP 는 2001 년에 나온 이후에 가능했습니다. Windows XP 의 기본 제공 ZIP 기능은 COM 인터페이스를 통해 노출되므로 활용할 수 있습니다 .
Peter Mortensen

180

Steven Penny의 PowerShell 솔루션을 확장하려면 다음과 같이 powershell.exe를 호출하여 배치 파일에 통합 할 수 있습니다.

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"

Ivan Shilo가 말했듯이 PowerShell 2에서는 작동하지 않으므로 PowerShell 3 이상 및 .NET Framework 4가 필요합니다.


1
실제로 이것은 .NET 4.5에서 제공되었습니다.
qJake

10
새 디렉토리를 만드는 대신 실제 디렉토리로 추출하는 방법을 궁금해하는 사람들 (나 같은 사람)의 경우 대상 매개 변수를 간단히 다음과 같이 설정하십시오 '.'.powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
Munchkin

압축을 높이기 위해이 명령을 사용할 수 있습니까? 파일 크기를 줄이려면 매우 압축해야합니까?
Nigel Fds

1
의 목적은 & {}무엇입니까? PS5로도 작동합니다 :powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
Roi Danton

@RoiDanton src.zip 및 dest.zip을 정의하기 위해 stringformatter를 사용하는 방법은 무엇입니까?
PySaad

161

현재 .NET 4.5 , PowerShell은이 작업을 수행 할 수 있습니다 :

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')

마지막 두 줄을 위해, bar그리고 foo당신이 가진 폴더를하고자하는 이름으로 대체 할 수있다, 또는 어떤 이름은 기존의 폴더입니다. foo.zip두 경우 모두 zip 파일로 작동하여 저장하거나 압축을 해제합니다.


17
이것은 .NET 4.5 기준입니다.
qJake

압축을 높이기 위해이 명령을 사용할 수 있습니까? 파일 크기를 줄이려면 매우 압축해야합니까?
Nigel Fds

여기에서 설치된 VM을 통해 .NET v4.0.30319, v2.0.50727, v1.1.4322, v1.0.3705가 설치되어 있습니다 : developer.microsoft.com/en-us/microsoft-edge/tools/vms . .NET 4.5가 필요하지
않은 것 같습니다

이것은 현대 시스템에서 가장 실용적인 솔루션이며, 2GB 이상의 크기로 압축을 작성하는 반면 표준 Powershell "Compress-Archive"는 실패합니다.
Shukri Adams

135

Java를 설치 한 경우 다음 jar명령을 사용하여 ZIP 아카이브로 압축 할 수 있습니다 .

jar -cMf targetArchive.zip sourceDirectory

c = 새 아카이브 파일을 만듭니다.

M = 매니페스트 파일을 아카이브에 추가하지 않도록 지정합니다.

f = 대상 파일 이름을 나타냅니다.


3
최고, 감사, 단지 제가 참고를 위해 ...보고 있었다 - 나는 ... DOS에서 예를 들어 항아리 CMF target.zip SOURCEDIR 마이너스 문자를 제거했다
mlo55

3
나쁘지는 않지만 JRE가 아닌 JDK가 설치되어 있어야합니다.
pdem

2
좋은 하나, 아마도 가장 플랫폼 독립적 인 솔루션입니다.)
Adrian

YMMD. 멋진 생각입니다. 많은 시간을 절약했습니다.
gorefest

3
이 적용되어 "사용 ... 전용 윈도우 내장의 기능을?" (내 강조)
Peter Mortensen

84

PowerShell 5.0

에서 Microsoft.PowerShell.Archive사용할 수 :

예 :

  • result.zip전체 Test폴더 에서 작성하십시오 .

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • result.zip지정된 Test폴더 에서 의 내용을 추출하십시오 .

    Expand-Archive -Path result.zip -DestinationPath C:\Test
    

13
이것은 잘 작동합니다, 감사합니다. 여기까지 오는 사람이라면 powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zip스크립트를 만들 필요없이 명령 줄에서 바로 사용할 수 있습니다 (Powershell v5가 설치되어 있고 최소한 Windows 7로 돌아갈 수 있다고 가정).
Beems

재실행을 계획하고 있다면 -Force 옵션을 추가하십시오.
Robin Salih

1
@Beems, 감사합니다! 그러나 나는 당신이 다른 방법으로 경로 / 목적지를 화나게했다고 생각합니까?
Yiping

이 작품은,하지만, 아카이브는 다르게 다음 탐색기 창을 사용하는 경우 발생하는 압축 "대상을 보낸을 -> 압축 (ZIP) 폴더는"파워 쉘 버전이 더 큰이며, 일부 프로그램은 추출 할 수 없습니다
에릭 Labashosky

압축 아카이브는 입력 파일에서 최대 파일 크기가 2GB입니다.
Sergei Rodionov

37

ZIP은 아니지만 Windows 도구를 사용하여 파일을 압축하는 유일한 방법은 다음과 같습니다.

makecab <source> <dest>.cab

압축을 풀려면

expand <source>.cab <dest>

고급 예 (ss64.com) :

Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"

추가 정보 : makecab , expand , makecab advanced uses



34

7-Zip 사용 :

우편 번호 : 폴더 foo가 있으며 압축을 풉니 다myzip.zip

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.zip -w foo -mem=AES256

압축 풀기 : 압축을 풀고 싶습니다 ( myzip.zip)를 현재 디렉토리 ( ./)로

"C:\Program Files\7-Zip\7z.exe" x  myzip.zip  -o./ -y -r

31
질문에 주목하십시오 :without the need to install any 3rd party
Roee Gavirel

16
@RoeeGavirel 7zip은 Windows 설치시 가장 먼저 설치해야하는 것 중 하나입니다. : P
developerbmw

3
@developerbmw-A. 왜 그렇습니까? B. 나는 7zip이없는 생산에서 ~ 100 대의 기계를 취급하고 있습니다. 이를 설치하려면 DevOps가 모든 시스템과 클러스터에 추가 될 모든 새 시스템에 설치해야합니다. 오히려 그것을 피하고 싶습니다.
Roee Gavirel

1
@Roland : 당신이 제발있을 수 있을까; 어디가 잘못 되었나요? 그것은 모두를 도울 것입니다.
Monir

1
@Roland : 방금 확인했는데 구문이 제대로 작동합니다. 컴퓨터에없는 "foo"폴더를 사용하고있을 것입니다. 그래도 추측하십시오.
Monir

9

나는이 정확한 질문에 대답하려고 노력했으며 내 연구에서 DiryBoy의 대답은 정확한 것 같습니다.

compact.exe 프로그램이 파일을 압축하지만 압축률이 높은 파일 (또는 파일 세트)을 만들지 않는 것을 발견했습니다. Windows에서 드라이브 문자 나 파티션을 마우스 오른쪽 버튼으로 클릭 할 때 얻는 옵션과 유사합니다. 파일을 압축 할뿐만 아니라 정리 (임시 파일 제거 등) 옵션도 제공됩니다. 압축 파일은 여전히 ​​액세스 가능하지만 공간이 부족한 드라이브에 공간을 만들기 위해 압축되었습니다.

또한 컴퓨터에있는 compress.exe를 발견했습니다. 기본적으로 대부분의 Windows 시스템에는 없으며 2003 Resource Kit의 일부입니다. 압축 파일을 만들지 만 실제로 Windows 설치 디스크의 파일과 비슷합니다 (파일 확장자 또는 이름의 마지막 문자로 밑줄이 있음). extract.exe 명령은 해당 파일을 추출합니다.

그러나 GUI를 통해 기본적으로 수행 할 수있는 명령은 명령 줄 내에서 배치, .vbs 또는 다른 유형의 스크립트를 통해 수행 할 수 있습니다. Windows는 zip 파일을 만드는 '보내기'옵션을 가지고 있었으므로 명령 줄을 통해 파일을 작성하는 방법이 있어야한다는 것을 알고 몇 가지 옵션을 찾았습니다.

다음은 Windows 기본 명령을 사용하여 파일을 압축하는 방법을 보여주는 훌륭한 링크입니다.

/superuser/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili

여러 개의 중첩 파일과 폴더가 들어있는 디렉토리로 테스트했으며 완벽하게 작동했습니다. 명령 행의 형식을 따르십시오.

내가 찾은 명령 줄을 통해 파일을 압축 해제하는 방법도 있습니다. 한 가지 방법은 압축 파일의 내용을 보여주는 탐색기 창을 여는 것입니다. 이것들 중 일부는 Java를 사용하는데, 이는 반드시 Windows 고유의 것은 아니지만 너무 일반적이므로 거의 그렇게 보입니다.

/superuser/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

명령 행을 사용하여 파일을 압축 해제하는 방법은 무엇입니까?



8

BAT 파일로 랩핑 된 VBScript 스크립트를 사용할 수 있습니다. 이 코드는 상대 PATH에서 작동합니다.

타사 도구 나 종속성이 필요하지 않습니다. 그냥 설정 SOURCEDIR하고 OUTPUTZIP.

파일 이름 : ZipUp.bat

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

' Create empty ZIP file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipup.vbs

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs

echo ' Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo     WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs

사용법 예

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp

또는 줄 CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%을 으로 바꾸어이 파일을 매개 변수화 할 수 있습니다.이 CScript _zipup.vbs %1 %2경우 단순히을 호출하여 더 쉽게 호출 할 수 있습니다 CALL ZipUp C:\Source\Dir C:\Archive.zip.


초기 zip 파일을 생성하는 행은 이스케이프 처리해야합니다. 그렇지 않으면 스크립트에서 끝나지 않습니다.
cup

예, 이것은 수퍼 유저 질문 과 같이 갈 수있는 방법 입니다.
Peter Mortensen

답변으로 올바르게 이스케이프 된 버전을 추가했습니다.
fsteff

5

이 모든 솔루션에 문제가 있습니다.

그것들은 정확히 동일 하지는 않으며 , 모두 RMB --> send to --> compressed (zipped) folder동일한 소스 폴더에서 만든 것 보다 약간 크기가 다른 파일을 만듭니다 . 내가 가진 가장 가까운 크기 차이는 다음과 같이 만든 300KB 차이 (스크립트> 설명서)입니다.

powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip

(주목하라 -CompressionLevel . 세 가지 값이 있습니다 : 가장 빠른, NoCompression 및 최적의가 (기본 : 최적))

작업중인 WordPress 플러그인 폴더를 .zip 아카이브로 자동 압축해야하는 .bat 파일을 만들고 싶었습니다. 따라서 WordPress 사이트에 업로드하고 플러그인을 테스트 할 수 있습니다.

그러나 어떤 이유로 든이 자동 압축 에서는 작동하지 않지만 수동 RMB 압축에서는 작동 하지만 마녀는 정말 이상합니다.

그리고 스크립트로 생성 된 .zip 파일은 실제로 WordPress 플러그인을 활성화 할 수없는 지점까지 손상 시키며 WordPress 내부에서도 삭제할 수 없습니다. 서버의 "뒷면"에 SSH로 접속하여 업로드 된 플러그인 파일 자체를 수동으로 삭제해야합니다. 수동으로 RMB에서 생성 된 파일은 정상적으로 작동합니다.


무엇 "WBR""RMB"는 ?
Peter Mortensen

RMB = 마우스 오른쪽 버튼. <wbr> = 브라우저에 "Word BReak 기회"를 나타내는 HTML 태그 (작동하지 않아 제거됨).
Sebastian Norr

4

스크립트의 일부로이를 수행해야하는 경우 가장 좋은 방법은 Java를 사용하는 것입니다. bin 디렉토리가 경로에 있다고 가정하면 (대부분의 경우) 명령 행을 사용할 수 있습니다.

jar xf test.zip

Java가 경로에 없으면 직접 참조하십시오.

C:\Java\jdk1.6.0_03\bin>jar xf test.zip

3

오픈 소스는 당신의 친구입니다 :-)

압축 해제 는 다음과 같습니다 . http://gnuwin32.sourceforge.net/packages/unzip.htm

ZIP 명령도 있습니다 : http://gnuwin32.sourceforge.net/packages/zip.htm

바이너리 다운로드가 충분하다.


Windows 8에서는 오류 : bzip2.dll이 누락되었습니다.
Doug

1
@Doug에 따르면 bzip2는 페이지의 요구 사항이며 다운로드 링크가 있습니다.
Sam

11
원래 질문은 표준 내장 Windows 명령을 사용하는 방법이었습니다. 또한 사용자가 자신의 도구 나 솔루션을 컴퓨터에 대한 관리 권한이 있거나 시스템에 대한 의존도가 점점 커지는 사용자에 국한되지 않기 때문에 사용자에게 다양한 타사 솔루션을 설치하도록 요구하는 것은 바람직하지 않습니다. . 오픈 소스는 친구 일 수도 있지만 다른 오픈 소스 패키지를 설치해야하는 다른 오픈 소스 패키지를 설치해야하는 오픈 소스 패키지는 친구가 아닙니다 .
Steve Hollasch 2016 년

SourceForge는 내 방화벽 정책에 의해 차단되었습니다 :-(
SnookerC

1
이것은 여전히 타사 sotware를 사용
Деян Добромиров에게

3

이것은 @ PodTech.io가 제공 한 답변으로 업데이트 된 버전입니다.

이 버전은 모든 vbs 코드가 배치 파일에서 올바르게 이스케이프되었습니다. 또한 서브 루틴으로 만들어져 배치 스크립트의 어느 곳에서나 한 줄로 호출 할 수 있습니다.

:: === Main code:

call :ZipUp "C:\Some\Path" "C:\Archive.zip"


:: === SubRoutines:

:ZipUp
::Arguments: Source_folder, destination_zip
(
    echo:Set fso = CreateObject^("Scripting.FileSystemObject"^)
    echo:InputFolder = fso.GetAbsolutePathName^(WScript.Arguments.Item^(0^)^)
    echo:ZipFile = fso.GetAbsolutePathName^(WScript.Arguments.Item^(1^)^)
    echo:
    echo:' Create empty ZIP file.
    echo:CreateObject^("Scripting.FileSystemObject"^).CreateTextFile^(ZipFile, True^).Write "PK" ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, vbNullChar^)
    echo:
    echo:Set objShell = CreateObject^("Shell.Application"^)
    echo:Set source = objShell.NameSpace^(InputFolder^).Items
    echo:objShell.NameSpace^(ZipFile^).CopyHere^(source^)
    echo:
    echo:' Keep script waiting until compression is done
    echo:Do Until objShell.NameSpace^( ZipFile ^).Items.Count = objShell.NameSpace^( InputFolder ^).Items.Count
    echo:    WScript.Sleep 200
    echo:Loop
)>_zipup.vbs
CScript //Nologo _zipup.vbs "%~1" "%~2"
del _zipup.vbs
goto :eof

2

타사 소프트웨어 없이이 작업을 수행하려고한다고 말합니다. .NET "타사"소프트웨어를 고려할 것인지 잘 모르겠습니다.

그러나 .NET에서 고유 한 명령 줄 유틸리티를 만들 수 있습니다. 몇 줄 이상의 코드가 필요하지 않습니다.

ZipFile 클래스


0

@Jason Duffett의 답변 과 주석을 추가 하면 사용자로부터 입력 및 출력 (각각 파일 이름 및 디렉토리 이름) 을 얻는 스크립트가 있습니다.

@echo off
set input=%1
set output=%2
powershell.exe "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('%input%', '%output%');"

용법:

unzip.bat path\to\file.zip path\to\output\directory

-4

파일을 압축하려면

C:\> zip -9 -m -o file.dat.zip file.dat
  • -9 최대 압축
  • -m 압축 성공 후 원본 파일 삭제
  • -o zip 파일의 수정 날짜를 원본 파일과 동일하게 설정
  • 너무 나쁜 것은 압축 할 파일의 이름에 .zip 확장자를 추가하는 대신 원하는 zip 파일의 이름을 지정해야합니다

4
두 가지 : (1) "zip"은 창과 함께 제공되지 않으므로 아마도 제 3 자일 것입니다. 내 질문에서 언급했듯이 타사를 설치할 수 없습니다. (2) 원하는 이름을 제공해야하는 이유는 압축 파일의 생성 및 보관 (예 : 폴더의 보안 폴더)에 둘 이상의 파일이있을 수 있기 때문입니다.
Roee Gavirel

@RoeeGavirel 서버에서 zip 명령 줄 유틸리티에 winzip GUI 도구가 설치되어 있지 않으므로 베어 CLI 도구가 Windows와 함께 제공되는 것 같습니다. 한편, compress, bzip2 및 gzip과 같은 Unix / Linux 압축 유틸리티는 원하는 이름을 전달하지 않으면 동일한 원본 파일 이름과 확장자 (.Z, .bz2 또는 .gz)로 압축 파일을 만듭니다. 압축 파일.
Tulains Córdova 2019

-4

다음과 같이 확장 명령 을 사용하여 압축 또는 기본 압축 Windows 파일을 압축 해제 할 수 있습니다.

expand MyFile.zip myFile

9
시도했지만 MyFile.zip을 myFile 폴더에 복사합니다.
fhnaseer

이것은 C : \> expand /?
snow6oy

11
확장은 .cab 파일에서만 작동하며 zip 파일에는 적합하지 않습니다.
рüффп

2
다른 의견은 여기에 있습니다. Expand file.zip file확장명없이 zip을 다른 파일로 복사하기 만하면됩니다. ZIP을 폴더로 압축 해제하지 않습니다.
Dave Marley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.