テキストファイルを出力するバッチファイルがあります。私もそれをジップアップできるといいと思いました。
これは管理されていない環境で使用されるため、7-Zipなどのサードパーティソフトウェア製品の存在について推測することはできません。これには、Windowsの組み込み機能を使用してファイルを圧縮する必要があります。
powershell.exe Compress-Archive file-to-zip.txt zippedfile.zip
(それはあまりにもフォルダで動作します)
テキストファイルを出力するバッチファイルがあります。私もそれをジップアップできるといいと思いました。
これは管理されていない環境で使用されるため、7-Zipなどのサードパーティソフトウェア製品の存在について推測することはできません。これには、Windowsの組み込み機能を使用してファイルを圧縮する必要があります。
powershell.exe Compress-Archive file-to-zip.txt zippedfile.zip
(それはあまりにもフォルダで動作します)
回答:
ここで指定したファイルを圧縮するすべてのバッチファイルソリューション(私の他の回答の変化)である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
ファイルを生成して名前を変更します。
write-zip
からダウンロードすることができレットPscxを。
TEMPDIR
ですか?あなたの意図は、ファイルFILETOZIP
をフォルダでラップすることだと思いますか?
追加のソフトウェアをインストールせずにファイルを圧縮することは可能です(テスト済みです)。解決策は次のとおりです。
これをコマンドラインウィンドウで実行して、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」部分)を通じて公開されます。VBScriptスクリプトはCOMコンポーネントにアクセスできるため、このCOMインターフェイスはVBScriptスクリプトから使用できます。スクリプトを完全に自己完結させるために、空のZIPファイルを作成して開始します(空のZIPファイルを作成し、VBScriptスクリプトと共にターゲットシステムにコピーすることもできます)。
VBScriptは、Windows 98以降、Microsoft Windowsのすべてのデスクトップリリースにデフォルトでインストールされています。
CScript.exe
Windows Script Hostの一部です。Windows Script Hostは、Windows 98以降のバージョンのWindowsでデフォルトで配布およびインストールされます。Internet Explorer 5(またはそれ以降のバージョン)がインストールされている場合にもインストールされます。
PowerShellを使用する場合は、.NET 2.0でzip機能を使用できます(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)}
圧縮ダイアログウィンドウの存在をポーリングすることにより、圧縮中にタイムアウトするリスクを排除できます。このメソッドは、ユーザーが圧縮ウィンドウからキャンセルすることも処理します。
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
.Sleep(whatever)
"は気分を害します。
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
objShell.NameSpace( ZipFile ).Items.Count
...ループ内で、それがZIPファイルが作成され、それが内部に期待される内容を持っているにもかかわらず、常に0です
コードを簡素化した複数のファイル/ディレクトリ。
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
これは、受け入れられた答えの突然変異です。一度に最大数千のファイルに対して大量の自動化タスクを実行するため、2秒間だけスリープすることはできません。私はここで回避策を集めましたが、これはここでジジー・コチャラの答えに似ています。
これにより、200ミリ秒ごとに宛先フォルダーにpingが実行されます。これは、MicrosoftがFSの更新を確認するように指示した速度とほぼ同じです。
Set parameters = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
SourceDir = FS.GetAbsolutePathName(parameters(0))
ZipFile = FS.GetAbsolutePathName(parameters(1))
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set shell = CreateObject("Shell.Application")
Set source_objects = shell.NameSpace(SourceDir).Items
Set ZipDest = shell.NameSpace(ZipFile)
Count=ZipDest.Items().Count
shell.NameSpace(ZipFile).CopyHere(source_objects)
Do While Count = ZipDest.Items().Count
wScript.Sleep 200
Loop
圧縮と解凍のための組み込み機能ウィンドウを要約するHere'a私の試み- https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -with-batch-f
ほとんどすべてのWindowsマシンで動作するはずのいくつかのソリューションがあります。
shell.applicationとWSH に関しては、一時 ファイルを必要としないハイブリッドバッチ/ jscriptファイル(拡張子.bat)を許可するため、jscriptを好みました。1つのファイルにunzipおよびzip機能を追加し、さらにいくつかの機能を追加しました。
Windows 8またはWindows Server 2012にPowerShellと.NET 4.5がある場合、これを行うことができます。
zip.ps1(使用法:)-directory <directory to zip up> -name <zip name>
:
param (
[string]$directory,
[string]$name
)
Add-Type -Assembly System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($directory, $name, [System.IO.Compression.CompressionLevel]::Optimal, $false)
zip.bat(PowerShellを呼び出すヘルパーが必要な場合、ディレクトリは最初の引数で、zip名は2番目です):
@Echo Off
powershell -ExecutionPolicy ByPass -Command "& '%~dpn0.ps1' -directory '%1' -name '%2'"
Windowsコマンドラインは、コンパクトコマンドを提供するようになりました。これは、私の知る限り、Windowsにネイティブです。私は何かを見逃さない限り、要求された要件を満たしているはずです。
compact
XPから存在し、NTFS圧縮を管理するためのツールです