Windows의 내장 기능 만 사용하여 명령 프롬프트에서 파일을 압축하여 파일을 압축 할 수 있습니까? 사용될 것이므로 7-Zip

텍스트 파일을 출력하는 배치 파일이 있습니다. 나는 그것을 지퍼로 묶을 수 있다면 좋을 것이라고 생각했다.

이것은 통제되지 않은 환경에서 사용될 것이므로 7-Zip 등과 같은 타사 소프트웨어 제품의 존재에 대해 가정 할 수 없습니다 .이 기능은 Windows의 기본 제공 기능을 사용하여 파일을 압축해야합니다.



답변

다음은 이름이 지정된 파일을 압축하여 c:\ue_english.txt넣는 모든 배치 파일 솔루션 (다른 답변의 변형)입니다 C:\someArchive.zip.

set FILETOZIP=c:\ue_english.txt

set TEMPDIR=C:\temp738
rmdir %TEMPDIR%
mkdir %TEMPDIR%
xcopy /s %FILETOZIP% %TEMPDIR%

echo Set objArgs = WScript.Arguments > _zipIt.vbs
echo InputFolder = objArgs(0) >> _zipIt.vbs
echo ZipFile = objArgs(1) >> _zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
echo wScript.Sleep 2000 >> _zipIt.vbs

CScript  _zipIt.vbs  %TEMPDIR%  C:\someArchive.zip

pause

에 저장된 폴더의 상위 항목에 대한 쓰기 권한이 필요합니다 TEMPDIR. 그렇지 않은 경우가 많으므로 C 드라이브의 루트를 TEMPDIR변경해야 할 수도 있습니다.

.bat스크립트가 있는 폴더에 대한 쓰기 액세스도 필요합니다 (파일을 생성 할 때).

또한 압축 파일의 파일 확장자는이어야합니다 .zip. 다른 확장을 사용하려고하면 스크립트 오류가 발생할 수 있습니다. 대신 .zip파일을 생성 하고 이름을 바꾸십시오.


답변

이다 추가 소프트웨어 (나는 그것을 테스트 한)를 설치하지 않고 파일을 압축 할 수. 해결책은 다음과 같습니다.

이를 명령 행 창에서 실행 C:\someArchive.zip하여 폴더의 모든 파일을 포함 하는 ZIP 파일을 작성하십시오 C:\test3.

CScript  zip.vbs  C:\test3  C:\someArchive.zip

파일 zip.vbs에 다음이 포함되어 있습니다.

' Get command-line arguments.
Set objArgs = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
InputFolder = FS.GetAbsolutePathName(objArgs(0))
ZipFile = FS.GetAbsolutePathName(objArgs(1))

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

Set objShell = CreateObject("Shell.Application")

Set source = objShell.NameSpace(InputFolder).Items

objShell.NameSpace(ZipFile).CopyHere(source)

' Required to let the ZIP command execute
' If this script randomly fails or the ZIP file is not complete,
' just increase to more than 2 seconds
wScript.Sleep 2000

공백이 포함 된 경로 및 파일 이름에 대해서는 테스트하지 않았습니다. 명령 줄 매개 변수를 따옴표로 묶으면 작동 할 수 있습니다.


작동 방식 : Windows에 내장 된 zip 기능 (Windows XP 이상)은 Windows 셸인 explorer.exe의 COM 인터페이스 ( “Shell.Application”부분 )를 통해 노출됩니다 . 이 COM 인터페이스는 VBScript 스크립트 에서 사용할 수 있습니다. 이러한 스크립트는 COM 구성 요소에 액세스 할 수 있기 때문입니다. 스크립트를 완전히 독립적으로 만들기 위해 빈 ZIP 파일을 만들어 시작할 수 있습니다 (빈 ZIP 파일을 만들어 VBScript 스크립트와 함께 대상 시스템에 복사 할 수도 있습니다).

VBScript는 Windows 98 이후 Microsoft Windows의 모든 데스크탑 릴리스에 기본적으로 설치되었습니다.

CScript.exeWindows Script Host의 일부입니다 . Windows 스크립트 호스트는 기본적으로 Windows 98 이상 버전의 Windows에서 배포 및 설치됩니다. Internet Explorer 5 이상 버전이 설치된 경우에도 설치됩니다.


답변

당신이 사용하는 열려있는 경우 PowerShell을 , 우편 기능 (PowerShell에서 .NET입니다) .NET 2.0에서 사용할 수 있습니다. 다음은 Mike Hodnick 의 사례 ( 출처 )입니다 .

########################################################
# out-zip.ps1
#
# Usage:
#    To zip up some files:
#       ls c:\source\*.txt | out-zip c:\target\archive.zip $_
#
#    To zip up a folder:
#       gi c:\source | out-zip c:\target\archive.zip $_
########################################################

$path = $args[0]
$files = $input

if (-not $path.EndsWith('.zip')) {$path += '.zip'}

if (-not (test-path $path)) {
  set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}

$ZipFile = (new-object -com shell.application).NameSpace($path)
$files | foreach {$zipfile.CopyHere($_.fullname)}


답변

압축 대화 상자 창의 존재를 폴링하여 압축 중 시간 종료 위험을 제거 할 수 있습니다. 이 방법은 또한 사용자가 압축 창을 취소하는 것을 처리합니다.

objShell.NameSpace(ZipFile).CopyHere(source)

' Wait for compression window to open
set scriptShell = CreateObject("Wscript.Shell")
Do While scriptShell.AppActivate("Compressing...") = FALSE
   WScript.Sleep 500 ' Arbitrary polling delay
Loop

' Wait for compression to complete before exiting script
Do While scriptShell.AppActivate("Compressing...") = TRUE
   WScript.Sleep 500 ' Arbitrary polling delay
Loop


답변

Resource Kit Tools 를 설치할 수있는 경우 zip과 같은 압축 된 아카이브 파일을 작성할 수있는 COMPRESS라는 명령 행 도구를 찾을 수 있습니다.

Microsoft (R) File Compression Utility  Version 5.00.2134.1
Copyright (C) Microsoft Corp. 1990-1999.  All rights reserved.

Compresses one or more files.

COMPRESS [-r] [-d] [-z] Source Destination
COMPRESS -r [-d] [-z] Source [Destination]

  -r            Rename compressed files.
  -d            Update compressed files only if out of date.
  -zx           LZX compression.
  -z            MS-ZIP compression.
  -zq[n]        Quantum compression and optional level
                (in range 1-7, default is 4).
  Source        Source file specification.  Wildcards may be used.
  Destination   Destination file | path specification.
                Destination may be a directory.
                If Source is multiple files and -r is not specified,
                Destination must be a directory.


답변

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


답변

코드가 단순화 된 여러 파일 / 디렉토리

cscript zip.vbs target.zip sourceFile1 sourceDir2 ... sourceObjN

zip.vbs 파일

Set objArgs = WScript.Arguments
ZipFile = objArgs(0)

' Create empty ZIP file and open for adding
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set zip = CreateObject("Shell.Application").NameSpace(ZipFile)

' Add all files/directories to the .zip file
For i = 1 To objArgs.count-1
  zip.CopyHere(objArgs(i))
  WScript.Sleep 10000 'REQUIRED!! (Depending on file/dir size)
Next