Windows에서는 다음과 같은 방법으로 일부 파일을 압축 할 수 있습니다
마우스 오른쪽 버튼을 클릭 → 보내기 → 압축 (압축) 폴더
.zip
파일 을 두 번 클릭하여 압축을 풀고 파일을 추출하십시오.
타사 소프트웨어를 설치할 필요없이 스크립트 (.bat 파일)에서 이러한 기능을 적용하는 방법이 있습니까?
Windows에서는 다음과 같은 방법으로 일부 파일을 압축 할 수 있습니다
마우스 오른쪽 버튼을 클릭 → 보내기 → 압축 (압축) 폴더
.zip
파일 을 두 번 클릭하여 압축을 풀고 파일을 추출하십시오.
타사 소프트웨어를 설치할 필요없이 스크립트 (.bat 파일)에서 이러한 기능을 적용하는 방법이 있습니까?
답변:
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 참조).
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가 필요합니다.
'.'
.powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
& {}
무엇입니까? PS5로도 작동합니다 :powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
현재 .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 파일로 작동하여 저장하거나 압축을 해제합니다.
Java를 설치 한 경우 다음 jar
명령을 사용하여 ZIP 아카이브로 압축 할 수 있습니다 .
jar -cMf targetArchive.zip sourceDirectory
c = 새 아카이브 파일을 만듭니다.
M = 매니페스트 파일을 아카이브에 추가하지 않도록 지정합니다.
f = 대상 파일 이름을 나타냅니다.
에서 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
powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zip
스크립트를 만들 필요없이 명령 줄에서 바로 사용할 수 있습니다 (Powershell v5가 설치되어 있고 최소한 Windows 7로 돌아갈 수 있다고 가정).
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
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
without the need to install any 3rd party
나는이 정확한 질문에 대답하려고 노력했으며 내 연구에서 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
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
.
이 모든 솔루션에 문제가 있습니다.
그것들은 정확히 동일 하지는 않으며 , 모두 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에서 생성 된 파일은 정상적으로 작동합니다.
오픈 소스는 당신의 친구입니다 :-)
압축 해제 는 다음과 같습니다 . http://gnuwin32.sourceforge.net/packages/unzip.htm
ZIP 명령도 있습니다 : http://gnuwin32.sourceforge.net/packages/zip.htm
바이너리 다운로드가 충분하다.
이것은 @ 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
타사 소프트웨어 없이이 작업을 수행하려고한다고 말합니다. .NET "타사"소프트웨어를 고려할 것인지 잘 모르겠습니다.
그러나 .NET에서 고유 한 명령 줄 유틸리티를 만들 수 있습니다. 몇 줄 이상의 코드가 필요하지 않습니다.
@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
파일을 압축하려면
C:\> zip -9 -m -o file.dat.zip file.dat
다음과 같이 확장 명령 을 사용하여 압축 또는 기본 압축 Windows 파일을 압축 해제 할 수 있습니다.
expand MyFile.zip myFile
Expand file.zip file
확장명없이 zip을 다른 파일로 복사하기 만하면됩니다. ZIP을 폴더로 압축 해제하지 않습니다.