텍스트 파일을 출력하는 배치 파일이 있습니다. 나는 그것을 지퍼로 묶을 수 있다면 좋을 것이라고 생각했다.
이것은 통제되지 않은 환경에서 사용될 것이므로 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.exe
Windows 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