source

Windows 의 빌트인 기능만을 사용해 스크립트를 압축 또는 압축 해제하려면 어떻게 해야 합니까?

itover 2023. 4. 12. 22:17
반응형

Windows 의 빌트인 기능만을 사용해 스크립트를 압축 또는 압축 해제하려면 어떻게 해야 합니까?

Windows 에서는, 다음의 방법으로 파일을 압축할 수 있습니다.

Send to → Compressed(zip 압축) 폴더를 마우스 오른쪽 버튼으로 클릭합니다.

그리고 두 번 클릭하여 압축을 푼다..zip파일을 정리하고 압축을 풉니다.

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

Penny의 솔루션을 하려면 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.

를 인스톨 하고 있는 는, Java 의 「」, 「ZIP」를 할 수 .jar★★★★★★★★★★★★★★★★★★:

jar -cMf targetArchive.zip sourceDirectory

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

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

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

PowerShell 5.0

다음 중 하나를 사용할 수 있습니다.

예:

  • result.zipTest★★★★

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • result.zip된 「」로Test★★★★

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

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

VBS 의 방법에 대해서는, 이 링크를 참조해 주세요.https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows

Windows 8부터는,NET Framework 4.5는 기본적으로 System과 함께 설치됩니다.IO. 압축.ZipArchive 및 PowerShell을 사용할 수 있습니다. 이를 위해 스크립트를 작성할 수 있습니다. https://stackoverflow.com/a/26843122/71312를 참조하십시오.

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 고급 용도

7-ZIP 사용:

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

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.

저는 이 질문에 대한 정확한 답을 찾고 있었고, 제가 조사한 바로는 DiryBoy의 답변이 정확한 것 같습니다.

compact.exe 프로그램은 파일을 압축하지만 고도로 압축된 파일(또는 파일 세트)은 생성하지 않습니다.Windows에서 드라이브 문자 또는 파티션을 마우스 오른쪽 버튼으로 클릭할 때 나타나는 옵션과 유사합니다.정리(임시 파일 제거 등) 및 파일 압축 옵션을 사용할 수 있습니다.압축된 파일은 여전히 액세스할 수 있지만 공간이 부족한 드라이브에 공간을 만들기 위해 압축됩니다.

압박물도 찾았어요exe를 컴퓨터에 저장했습니다.대부분의 윈도 머신에는 기본적으로 탑재되어 있지 않으며 2003년 자원 키트의 일부입니다.압축된 파일도 만들 수 있지만 Windows 셋업 디스크의 파일(파일 확장자 또는 이름의 마지막 문자로 밑줄이 있음)과 매우 유사합니다.그리고 추출물.exe 명령어는 이러한 파일을 추출합니다.

단, GUI를 통해 네이티브하게 실행할 수 있는 경우에는 배치, .vbs 또는 명령줄 내의 다른 유형의 스크립트를 사용하여 실행할 수 있습니다.윈도에 zip 파일을 만드는 '보낼 곳' 옵션이 있었기 때문에 명령줄을 통해 파일을 만드는 방법이 있어야 한다는 것을 알고 몇 가지 옵션을 찾았습니다.

다음은 Windows 네이티브명령어를 사용하여 파일을 압축하는 방법을 보여 주는 훌륭한 링크입니다.

https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili

여러 개의 중첩된 파일과 폴더가 포함된 디렉토리로 테스트했더니 완벽하게 작동했습니다.명령줄 형식을 따르기만 하면 됩니다.

제가 찾은 명령줄을 통해 파일을 압축 해제하는 방법도 있습니다.한 가지 방법은 압축된 파일의 내용을 보여주는 탐색기 창을 여는 것입니다.이들 중 일부는 Java를 사용하기도 하는데, Java는 반드시 Windows에 네이티브할 필요는 없지만 매우 일반적이기 때문에 거의 그렇게 보입니다.

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

명령줄을 사용하여 파일을 압축 해제하려면 어떻게 해야 합니까?

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

jar xf test.zip

Java가 경로에 없는 경우 직접 참조합니다.

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

나는 이 모든 해결책에 문제가 있다.

이 파일들은 완전히 동일하지는 않으며, 모든 파일들은 파일 크기 차이가 약간 있습니다.RMB --> send to --> compressed (zipped) folder★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★지금까지 가장 가까운 크기 차이는 300KB 차이(스크립트 > 수동)입니다.이 차이는 다음과 같습니다.

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

(-Compression(압축)에 주의해 주십시오.Level. 가능한 값은 세 가지입니다.고속, 비압축 및 최적(기본값: Optimal)

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

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

또한 스크립트에서 생성된 .zip 파일은 실제로 WordPress 플러그인을 활성화할 수 없을 정도로 끊어지며 WordPress 내부에서 삭제할 수도 없습니다.서버의 「후면」에 SSH 해, 업 로드한 플러그인 파일 자체를 수동으로 삭제할 필요가 있습니다.수동으로 생성된 RMB 파일은 정상적으로 동작합니다.

by@PodTech.io 에서 제공되는 답변의 갱신 버전입니다.

이 버전에서는 배치 파일에서 모든 vbs 코드가 올바르게 이스케이프됩니다.또한 서브루틴으로 작성되어 배치 스크립트의 임의의 장소에서1 행으로 호출할 수 있습니다.

:: === 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

Shell. 어플리케이션

Shell과 함께.explor.exe의 파일 및 폴더를 에뮬레이트할 수 있는 응용 프로그램이 스크립트는 zipjs라고 불립니다.배트:

:: unzip content of a zip to given folder.content of the zip will be not preserved (-keep no).Destination will be not overwritten (-force no)
call zipjs.bat unzip -source C:\myDir\myZip.zip -destination C:\MyDir -keep no -force no

:: lists content of a zip file and full paths will be printed (-flat yes)
call zipjs.bat list -source C:\myZip.zip\inZipDir -flat yes

:: lists content of a zip file and the content will be list as a tree (-flat no)
call zipjs.bat list -source C:\myZip.zip -flat no

:: prints uncompressed size in bytes
zipjs.bat getSize -source C:\myZip.zip

:: zips content of folder without the folder itself
call zipjs.bat zipDirItems -source C:\myDir\ -destination C:\MyZip.zip -keep yes -force no

:: zips file or a folder (with the folder itslelf)
call zipjs.bat zipItem -source C:\myDir\myFile.txt -destination C:\MyZip.zip -keep yes -force no

:: unzips only part of the zip with given path inside
call zipjs.bat unZipItem -source C:\myDir\myZip.zip\InzipDir\InzipFile -destination C:\OtherDir -keep no -force yes
call zipjs.bat unZipItem -source C:\myDir\myZip.zip\InzipDir -destination C:\OtherDir 

:: adds content to a zip file
call zipjs.bat addToZip -source C:\some_file -destination C:\myDir\myZip.zip\InzipDir -keep no
call zipjs.bat addToZip -source  C:\some_file -destination C:\myDir\myZip.zip

제조실

메이커브zip을할 수 파일 른른른른zip ( zip )입니다..cab일부 확장자를 사용하면 Linux 머신에서도 사용할 수 있습니다.

파일 압축:

makecab file.txt "file.cab"

폴더 전체를 압축하려면 조금 더 많은 작업이 필요합니다.디렉토리는 cabDir.bat으로 압축됩니다.

call cabDir.bat ./myDir compressedDir.cab

압축 해제 기능은expand★★★★★★★★★★★★★★★★★★:

EXPAND cabfile -F:* .

보다 해킹적인 방법은 excher32 명령어로 자기해동 실행 파일을 작성하는 것입니다.

copy /b "%windir%\system32\extrac32.exe"+"mycab.cab" "expandable.exe"
call expandable.exe

타르

윈도 빌드 17063에서는 tar 명령어를 사용할 수 있습니다.

::compress directory
tar -cvf archive.tar c:\my_dir
::extract to dir
tar -xvf archive.tar.gz -C c:\data

.NET 툴

.net(및 powershell)은 파일을 압축 및 압축 해제하는 다양한 방법을 제공합니다.가장 간단한 것은 gzip 스트림입니다.이 스크립트는 gzipjs라고 불립니다.배트:

::zip
call gzipjs.bat -c my.file my.zip
::unzip
call gzipjs.bat -u my.zip my.file

이것은 나에게 효과가 있었다(221년):

tar -xf test.zip

현재 디렉토리에서 테스트의 압축을 풉니다.

새로운 윈도 빌드에는 tar.exe가 포함됩니다.
tar.exe는 cmd 또는 Windows 배치 파일에서 사용할 수 있습니다.

//Compress a folder:
tar -caf aa.zip c:\aa

이 명령을 사용하여 전체 폴더와 하위 폴더를 압축할 수 있습니다.

콤팩트 /c /s "C:\Temp\my_folder" /I /Q

압축 해제 방법

콤팩트 /u /s:"C:\Temp\my_folder" /I /Q

c는 compress, u는 decompress를 나타냅니다.

@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

배치 파일로 zip 파일을 압축 해제하는 방법을 찾았습니다.

@echo off
::unziper
set /p zip=zip:
powershell -Command "Expand-Archive %zip%"
echo done
pause

혹시 필요할지도 모르니까 올립니다.왜 내 대답을 수정한거야?

@Noam Manos의 답변에 따르면, 우리는 에일리어스를 사용하여 지퍼를 조금 더 향상시킬 수 있습니다..bashrc 파일:

alias zip='jar -cMf'

(bash terminal의) 명령어는

zip target.zip dir1 dir2

주의: 이 기능이 작동하려면 java와 git bash가 설치되어 있어야 합니다.

언급URL : https://stackoverflow.com/questions/17546016/how-can-you-zip-or-unzip-from-the-script-using-only-windows-built-in-capabiliti

반응형