Windows XP/Vista/2003/2008に組み込まれているZIP圧縮は、まったくスクリプト化できますか?どの実行可能ファイルをBAT/CMDファイルから呼び出す必要がありますか?またはVBScriptでそれを行うことは可能ですか?Windowsの組み込みZIP圧縮をスクリプト化できますか?
これはWinZip,7-Zipなどの外部アプリケーションを使用して可能ですが、私は外部アプリケーションをインストールする必要がないものを探しています。
Windows XP/Vista/2003/2008に組み込まれているZIP圧縮は、まったくスクリプト化できますか?どの実行可能ファイルをBAT/CMDファイルから呼び出す必要がありますか?またはVBScriptでそれを行うことは可能ですか?Windowsの組み込みZIP圧縮をスクリプト化できますか?
これはWinZip,7-Zipなどの外部アプリケーションを使用して可能ですが、私は外部アプリケーションをインストールする必要がないものを探しています。
zipとunzipには、圧縮されたウィンドウを使用するVBAメソッドもあります。これは、システムの動作方法についていくつかの洞察を与えるはずです。これらのメソッドを任意のスクリプト言語に組み込むことができます。
基本的な原則は、ウィンドウ内では、zipファイルをディレクトリとして扱い、そこにコピーすることができるということです。したがって、新しいzipファイルを作成するには、空のzipファイルの正しいヘッダーを持つ拡張子が.zip
のファイルを作成するだけです。次に、ファイルを閉じて、別のディレクトリであるかのようにファイルにコピーすることをウィンドウに指示します。
解凍は簡単です。単にディレクトリとして扱います。ここでは、Webページが再び失われた場合には
は、関連するコードスニペットのいくつかは次のとおりです。
Sub NewZip(sPath)
'Create empty Zip File
'Changed by keepITcool Dec-12-2005
If Len(Dir(sPath)) > 0 Then Kill sPath
Open sPath For Output As #1
Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
Close #1
End Sub
Function bIsBookOpen(ByRef szBookName As String) As Boolean
' Rob Bovey
On Error Resume Next
bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing)
End Function
Function Split97(sStr As Variant, sdelim As String) As Variant
'Tom Ogilvy
Split97 = Evaluate("{""" & _
Application.Substitute(sStr, sdelim, """,""") & """}")
End Function
Sub Zip_File_Or_Files()
Dim strDate As String, DefPath As String, sFName As String
Dim oApp As Object, iCtr As Long, I As Integer
Dim FName, vArr, FileNameZip
DefPath = Application.DefaultFilePath
If Right(DefPath, 1) <> "\" Then
DefPath = DefPath & "\"
End If
strDate = Format(Now, " dd-mmm-yy h-mm-ss")
FileNameZip = DefPath & "MyFilesZip " & strDate & ".zip"
'Browse to the file(s), use the Ctrl key to select more files
FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xl*), *.xl*", _
MultiSelect:=True, Title:="Select the files you want to zip")
If IsArray(FName) = False Then
'do nothing
Else
'Create empty Zip File
NewZip (FileNameZip)
Set oApp = CreateObject("Shell.Application")
I = 0
For iCtr = LBound(FName) To UBound(FName)
vArr = Split97(FName(iCtr), "\")
sFName = vArr(UBound(vArr))
If bIsBookOpen(sFName) Then
MsgBox "You can't zip a file that is open!" & vbLf & _
"Please close it and try again: " & FName(iCtr)
Else
'Copy the file to the compressed folder
I = I + 1
oApp.Namespace(FileNameZip).CopyHere FName(iCtr)
'Keep script waiting until Compressing is done
On Error Resume Next
Do Until oApp.Namespace(FileNameZip).items.Count = I
Application.Wait (Now + TimeValue("0:00:01"))
Loop
On Error GoTo 0
End If
Next iCtr
MsgBox "You find the zipfile here: " & FileNameZip
End If
End Sub
Sub Unzip1()
Dim FSO As Object
Dim oApp As Object
Dim Fname As Variant
Dim FileNameFolder As Variant
Dim DefPath As String
Dim strDate As String
Fname = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", _
MultiSelect:=False)
If Fname = False Then
'Do nothing
Else
'Root folder for the new folder.
'You can also use DefPath = "C:\Users\Ron\test\"
DefPath = Application.DefaultFilePath
If Right(DefPath, 1) <> "\" Then
DefPath = DefPath & "\"
End If
'Create the folder name
strDate = Format(Now, " dd-mm-yy h-mm-ss")
FileNameFolder = DefPath & "MyUnzipFolder " & strDate & "\"
'Make the normal folder in DefPath
MkDir FileNameFolder
'Extract the files into the newly created folder
Set oApp = CreateObject("Shell.Application")
oApp.Namespace(FileNameFolder).CopyHere oApp.Namespace(Fname).items
'If you want to extract only one file you can use this:
'oApp.Namespace(FileNameFolder).CopyHere _
'oApp.Namespace(Fname).items.Item("test.txt")
MsgBox "You find the files here: " & FileNameFolder
On Error Resume Next
Set FSO = CreateObject("scripting.filesystemobject")
FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True
End If
End Sub
警告:投稿されたスクリプトは、Windowsシェルの実装依存の動作に依存します。たとえば、サードパーティの圧縮ソフトウェアがZIPアーカイブのデフォルトのOLE動詞を変更すると、簡単に破損することがあります。また、zipfldr.dll COMオブジェクトは、MSによるこの使用のために文書化されておらず、サポートもされていません。 –
ZauファイルのFaux、OLE動詞は、上記のスクリプトを妨害しません。サポートしていない(または文書化していない)と、自動的にMSがそれを壊そうとしているわけではありません。彼らはそうかもしれませんが、それを文書化するかもしれません。 – wqw
リンクが無効です – beerwin
SourceForge(http://sourceforge.net/projects/unxutils)で利用可能なUnxUtilsパッケージには、zipとunzipの両方の実行可能ファイル(および他の有用なアプリケーションのボートロード)があります。それらを 'c:\ windows'のようなあなたのPATHの場所にコピーすると、あなたのスクリプトにそれらを含めることができます。
これは完璧な解決策ではありません。
UnxUtilsプロジェクトはもはやメンテナンスされていないようです(2007年以降は何も新しくありません)。 [GNUWin32プロジェクト](http://gnuwin32.sourceforge.net/)には、Windows上のGNUツールの最新リリースがあります。それには、[InfoZip](http://www.info-zip.org/)のzip/unzipのビルドが含まれています。しかし、InfoZipビルド[自分のソースから](http://sourceforge.net/projects/infozip/files/)を直接作る方がより安全で安全です。 – dolmen
はい、これはとスクリプト化することができますVBScript。たとえば、次のコードは、ディレクトリからzipファイルを作成することができます:それはVBScriptでいっぱい解凍/ジップ実装が含まれてます。またhttp://www.naterice.com/blog/template_permalink.asp?id=64役に立つを見つけることが
Dim fso, winShell, MyTarget, MySource, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set winShell = createObject("shell.application")
MyTarget = Wscript.Arguments.Item(0)
MySource = Wscript.Arguments.Item(1)
Wscript.Echo "Adding " & MySource & " to " & MyTarget
'create a new clean zip archive
Set file = fso.CreateTextFile(MyTarget, True)
file.write("PK" & chr(5) & chr(6) & string(18,chr(0)))
file.close
winShell.NameSpace(MyTarget).CopyHere winShell.NameSpace(MySource).Items
do until winShell.namespace(MyTarget).items.count = winShell.namespace(MySource).items.count
wscript.sleep 1000
loop
Set winShell = Nothing
Set fso = Nothing
。
アイテム数ではなく500ミリ秒ごとにサイズチェックを行うと、大容量ファイルの方が効果的です。 Win 7は、圧縮が完了していなくても即座にファイルを書き込みます。
set fso=createobject("scripting.filesystemobject")
Set h=fso.getFile(DestZip)
do
wscript.sleep 500
max = h.size
loop while h.size > max
大量のログファイルには最適です。
これはVista上で動作しますか?私はいくつかの問題に遭遇しており、Vistaが原因だと主張する準備は整っています。 – Icode4food
わかりやすくするために、GzipはGuy Starbuckが8月のコメントで提案したMS専用のアルゴリズムではありません。 System.IO.CompressionのGZipStreamは、zlibライブラリや他の多くのzipツールと同じDeflateアルゴリズムを使用します。そのクラスは、gzipのようなunixユーティリティと完全に相互運用可能です。
GZipStreamクラスは、ZIPファイルを生成するためにコマンドラインやVBScriptからスクリプト化できないため、元のポスターの要求には答えられません。
無料のDotNetZipライブラリは、zipファイルを読み込んで生成し、VBScriptまたはPowershellからスクリプトを作成することができます。また、zipファイルの作成と読み取り/抽出を行うコマンドラインツールも含まれています。ここで
は、VBScriptのためにいくつかのコードです:
dim filename
filename = "C:\temp\ZipFile-created-from-VBScript.zip"
WScript.echo("Instantiating a ZipFile object...")
dim zip
set zip = CreateObject("Ionic.Zip.ZipFile")
WScript.echo("using AES256 encryption...")
zip.Encryption = 3
WScript.echo("setting the password...")
zip.Password = "Very.Secret.Password!"
WScript.echo("adding a selection of files...")
zip.AddSelectedFiles("*.js")
zip.AddSelectedFiles("*.vbs")
WScript.echo("setting the save name...")
zip.Name = filename
WScript.echo("Saving...")
zip.Save()
WScript.echo("Disposing...")
zip.Dispose()
WScript.echo("Done.")
はここにPowerShellのためのいくつかのコードです:.BATまたは.CMDファイルで
[System.Reflection.Assembly]::LoadFrom("c:\\dinoch\\bin\\Ionic.Zip.dll");
$directoryToZip = "c:\\temp";
$zipfile = new-object Ionic.Zip.ZipFile;
$e= $zipfile.AddEntry("Readme.txt", "This is a zipfile created from within powershell.")
$e= $zipfile.AddDirectory($directoryToZip, "home")
$zipfile.Save("ZipFiles.ps1.out.zip");
、あなたがzipit.exeやunzip.exeを追加を使用することができますツール。例:あなたは、ユーティリティを使用することができます圧縮アーカイブを作成する
zipit NewZip.zip -s "This is string content for an entry" Readme.txt src
Here'a圧縮と解凍のためのビルトイン機能の窓要約する私の試み - How can I compress (/ zip) and uncompress (/ unzip) files and folders with batch file without using any external tools?
でほぼすべてのWindowsマシンで動作する必要のあるソリューションはほとんどありません。で解凍し、ジップ機能を入れfiles.I've温度を必要としないことは、それが(.BAT拡張子を持つ)ハイブリッドバッチ/ JScriptのファイルを可能にするように、私はjscript 好ましいshell.applicationとWSHに関してとして
1つのファイルに加えていくつかの機能が追加されました。
GoogleにはさまざまなVBScript実装が用意されています。 "Windowsシェル(XP、Vista、2003および2008)およびVBScriptを使用したZipおよびUnZipファイル(http://www.naterice.com/blog/template_permalink.asp?id=64)"を参照してください。私はこれらをテストしていないが、彼らは圧縮するのではなく、単に「ジップ」している可能性が最も高い。 – samjudson
あなたはzipとcompressの間で何を区別していますか? – Cheeso
unixの 'tar'のように、圧縮せずにファイルを一つのファイルに '圧縮'することができます。これにより、パッケージとしてファイルを配布できますが、ディスク容量のサイズは縮小されません。 – samjudson