Можно ли архивировать файл от командной строки с помощью ТОЛЬКО встроенную поддержку Windows для zip-файлов?

У меня есть пакетный файл, это производит текстовый файл. Я думал, что будет хорошо, если я мог бы архивировать его также.

Это будет использоваться в неконтролируемой среде, таким образом, я не смогу сделать предположения о присутствии сторонних программных продуктов таким как С 7 zip и т.д. Это должно использовать now-built-in поддержку Windows для zip-файлов.

111
задан 16.03.2013, 10:29

4 ответа

Вот все решение для пакетного файла (изменение моего другого ответа), который архивирует названный файл 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 файл и переименовывает его.

85
ответ дан 07.12.2019, 07:51

Это возможно к zip-файлам без установки любого дополнительного программного обеспечения (я протестировал его). Решение:

Выполните это в окне командной строки для создания названного zip-файла C:\someArchive.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

Я не протестировал его на пути и имена файлов, содержащие пробелы. Это может работать, если кавычки помещаются вокруг параметров командной строки.


Как это работает: встроенная функциональность zip в Windows (Windows XP и позже?) выставляется через COM-интерфейсы от оболочки Windows, explorer.exe - который является "Shell. Приложение" часть. Этот COM-интерфейс может использоваться из сценария VBScript, потому что такой сценарий может получить доступ к COM-компонентам. Для создания сценария полностью автономным, это создает пустой zip-файл для начала работы (можно было также создать пустой zip-файл и скопировать его в целевую систему наряду со сценарием VBScript).

VBScript был установлен по умолчанию в каждом настольном выпуске Microsoft Windows начиная с Windows 98.

CScript.exe часть Windows Script Host. Windows Script Host распределен и установлен по умолчанию на Windows 98 и более поздних версиях Windows. Это также установлено, если  Internet Explorer 5 (или более поздняя версия) установлен.

38
ответ дан 07.12.2019, 07:51

Если Вы открыты для использования PowerShell, возможности zip доступны в.NET 2.0 (PowerShell является.NET). Вот пример (источник) кредит 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)}
12
ответ дан 07.12.2019, 07:51

Если Вы сможете установить Инструменты Набора Ресурса, то Вы найдете инструмент командной строки под названием СЖАТИЕ, которое может создать сжатые архивные файлы как zip.

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.
5
ответ дан 07.12.2019, 07:51

Теги

Похожие вопросы