Windowsの組み込み機能のみを使用して、スクリプトからどのように圧縮または解凍できますか?


294

Windowsでは、いくつかのファイルを

右クリック→ 送信圧縮(zip形式)フォルダ

そして、.zipファイルをダブルクリックして解凍し、ファイルを抽出します。

サードパーティのソフトウェアをインストールせずに、スクリプト(.batファイル)からこれらの機能を適用する方法はありますか?



16
まあ、それはおそらくそれをバッチファイルまたはプログラムから呼び出すためです。(それが私がここにいる理由です。zipファイルであることが必要なWebサイト用の小さな製品を「ビルド」するために、迅速な.BATファイルを作成しようとしています。)
Jon Coombs

46
この質問が閉じられたのは正気ではない。
Sam Goldberg

1
この質問をスーパーユーザーに移動することはできますか?
Hanxue 2017

21
それでも2018年に非常に有用との関連:P
マイケル・フィーバー

回答:


82

2013年には、それは不可能でした。マイクロソフトは、このための実行ファイルを提供していません。

これを行うVBSの方法については、このリンクを参照してください。 /superuser/201371/create-zip-folder-from-the-command-line-windows

Windows 8以降では、.NET Framework 4.5がデフォルトでインストールされ、System.IO.Compression.ZipArchiveおよびPowerShellが利用可能です。これを実現するスクリプトを記述できます。https://stackoverflow.com/a/26843122/71312を参照して ください


1
PSがこれを許可し、Windowsにプリインストールされており、コマンドラインから利用できるため、これは不正解です。
Dan Atkinson

4
@DanAtkinson更新されました。それは2013年に返答された、リンクはいくつかのVBS方法を提供しました。PSの方法には、Windows 8以降を必要とする.Net 4.5が必要です。
Diryboy 2015

更新していただきありがとうございます!それに応じて私の投票を修正しました。:)
Dan Atkinson

6
@MichaelMrozekまあ、「コマンドライン」は総称的にCMD / COMMANDではなく任意のコマンドラインを指し、PSは間違いなく* nixのbash、sh、rshと同様にコマンドラインです。しかし、さらに進むと、コマンドラインからpowershellを実行できるため、cmd / commandが唯一のコマンドラインであると信じたい場合でも、質問に答えます。
ロバートマッキー2017年

1
それ 2013年可能でした(追加のソフトウェアをインストールすることなく)。スーパーユーザーの質問を参照してください。これは、Windows XPが2001年にリリースされてから可能になりました。WindowsXPに組み込まれているZIP機能は、COMインターフェイスを通じて公開されるため、活用できます
Peter Mortensen

180

Steven PennyのPowerShellソリューションを拡張するには、次のようにpowershell.exeを呼び出してバッチファイルに組み込むことができます。

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"

Ivan Shiloが言ったように、これはPowerShell 2では機能しません。PowerShell3以降と.NET Framework 4が必要です。


1
実際、これは.NET 4.5で利用可能になりました。
qJake 2015

10
(新しいディレクトリを作成するのではなく)実際のディレクトリに抽出する方法を知りたい(私のような)場合は、ターゲットパラメータをに設定するだけです'.'。例:powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
Munchkin

これらのコマンドを使用して圧縮率を上げることはできますか?ファイルサイズを減らすために超圧縮にするのが好きですか?
Nigel Fds 2017

1
の目的は& {}何ですか?PS5でもこれは機能します。– powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
Roi Danton

@RoiDanton src.zipおよびdest.zipを定義するためのstringformatterの使用方法
PySaad

161

とおり、.NET 4.5、PowerShellは、これを行うことができます:

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')

最後の2行については、barfooあなたが持っているフォルダ、または任意の名前は、既存のフォルダであることを伝えたい名前に置き換えることができます。foo.zipどちらの場合も、保存または解凍するzipファイルとして機能します。


17
これは.NET 4.5以降です。
qJake 2015

これらのコマンドを使用して圧縮率を上げることはできますか?ファイルサイズを減らすために超圧縮にするのが好きですか?
Nigel Fds 2017

:私は、.NET v4.0.30319、v2.0.50727の、V1.1.4322、VMに介してインストールv1.0.3705とは、ここからインストールされているdeveloper.microsoft.com/en-us/microsoft-edge/tools/vms、この作品を。 。したがって、.NET 4.5が必要ないことを推測しています
alpha_989

これは、最新のシステムで最も実用的なソリューションです。これは、サイズが2GBを超えるzipを書き込みますが、標準のPowershell "Compress-Archive"は失敗します。
Shukri Adams

135

Javaがインストールされている場合は、jar次のコマンドを使用してZIPアーカイブに圧縮できます。

jar -cMf targetArchive.zip sourceDirectory

c =新しいアーカイブファイルを作成します。

M =マニフェストファイルをアーカイブに追加しないことを指定します。

f =ターゲットファイル名を示します。


3
すごい、ありがとう、ちょうど私が探していたもの... FYI-私はDOSでマイナス文字を削除しなければなりませんでした...例jar cMf target.zip sourceDir
mlo55

3
悪くはありませんが、JREではなくJDKをインストールする必要があります。
pdem 16

2
これはおそらくプラットフォームに依存しないほとんどのソリューションです;)
Adrian

YMMD。素晴らしいアイデア。時間を大幅に節約できました。
gorefest

3
これは「... Windowsの組み込み機能のみを使用する」でカバーされていますか?(私の強調)
Peter Mortensen

84

PowerShell 5.0

Microsoft.PowerShell.Archiveあなたから使用できます:

例えば:

  • フォルダーresult.zip全体から作成Test

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • result.zip指定されたTestフォルダの内容を抽出します。

    Expand-Archive -Path result.zip -DestinationPath C:\Test
    

13
これはうまくいきます、ありがとう。ここまでpowershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zipたどり着く人なら、スクリプトを作成しなくてもコマンドラインから直接使用できます(Powershell v5がインストールされていれば、少なくともWindows 7に戻ることができます)。
Beems 2017年

正常に動作します。再実行する場合は-Forceオプションを追加してください。
Robin Salih 2017

1
@Beems、ありがとう!しかし、私はあなたがパス/目的地を逆に怒っていると思いますか?
Yiping

これは機能しますが、アーカイブはWindowsエクスプローラーの「送信先->圧縮(zip形式)フォルダー」を使用した場合とは異なる方法で圧縮されます。Powershellバージョンは大きくなり、一部のプログラムは抽出できません
Eric Labashosky

Compress-Archiveの入力ファイルの最大ファイル制限は2GBです
Sergei Rodionov

37

これは正確にはZIPではありませんが、Windowsツールを使用してファイルを圧縮する唯一の方法は次のとおりです。

makecab <source> <dest>.cab

解凍するには:

expand <source>.cab <dest>

高度な例(ss64.comから):

Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"

詳細:makecabexpandmakecabの高度な使用法



34

7-Zipの使用:

Zip:フォルダがありfoo、zipしたいmyzip.zip

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.zip -w foo -mem=AES256

Unzipmyzip.zip現在のディレクトリ(./)に解凍します()

"C:\Program Files\7-Zip\7z.exe" x  myzip.zip  -o./ -y -r

31
質問に注意してください:without the need to install any 3rd party
Roee Gavirel

16
@RoeeGavirel 7zipは、すべてのWindowsインストールで最初にインストールするものの1つです:P
developerbmw

3
@developerbmw-A.なぜですか?B. 7zipがインストールされていない生産中のマシンを100台まで扱っています。これをインストールするには、DevOpsをインストールして、クラスターに追加するすべてのマシンとすべての新しいマシンにインストールする必要があります。私はむしろそれを避けたいです。
Roee Gavirel、2016年

1
@ローランド:ゆったりしてください。どこがいけないの?それはすべてを助けます。
モニール2017

1
@Roland:チェックしたところ、構文は正常に機能しています。おそらく、あなたのマシンには存在しない "foo"フォルダを試そうとしているのでしょう。ただ推測してください。
モニール2017

9

私はこの正確な質問に答えるために探していました、そして私の研究から、ディリーボーイの反応は正確であるようです。

私は、compact.exeプログラムがファイルを圧縮するが、高度に圧縮されたファイル(またはファイルのセット)を作成しないことを発見しました。これは、Windowsでドライブ文字またはパーティションを右クリックしたときに表示されるオプションに似ています。ファイルを圧縮するだけでなく、クリーンアップ(一時ファイルの削除など)を行うオプションが表示されます。圧縮されたファイルは引き続きアクセス可能ですが、スペースが少ないドライブにスペースを作成するために圧縮されます。

私はたまたま自分のコンピューター上にあるcompress.exeも見つけました。ほとんどのWindowsマシンにはネイティブではなく、2003リソースキットの一部です。一種の圧縮ファイルを作成しますが、Windowsセットアップディスクのファイルに非常に似ています(ファイルの拡張子または名前の最後の文字にアンダースコアが付いています)。そして、extract.exeコマンドはそれらのファイルを抽出します。

ただし、マントラは、GUIを介してネイティブに実行できる場合は、バッチ、.vbs、またはコマンドライン内の他のタイプのスクリプトを使用して実行する方法がある可能性があります。Windowsにはzipファイルを作成するための「送信先」オプションがあったため、コマンドラインから実行する方法が必要であることを知っていて、いくつかのオプションを見つけました。

これは、Windowsネイティブコマンドを使用してファイルを圧縮する方法を示す優れたリンクです。

/superuser/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili

複数のネストされたファイルとフォルダを含むディレクトリでテストしましたが、完全に機能しました。コマンドラインのフォーマットに従ってください。

私が見つけたコマンドラインを介してファイルを解凍する方法もあります。1つの方法は、zipファイルの内容を示すエクスプローラーウィンドウを開くだけです。これらのいくつかは、必ずしもウィンドウにネイティブである必要はないが、それがほとんどそうであるように非常に一般的であるJavaを使用します。

/superuser/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

コマンドラインを使用してファイルを解凍する方法は?



8

BATファイルにラップされたVBScriptスクリプトを使用できます。このコードは相対パスで機能します。

サードパーティのツールや依存関係は必要ありません。設定SOURCEDIRしてくださいOUTPUTZIP

ファイル名:ZipUp.bat

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

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

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs

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

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs

使用例

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp

または、行CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%CScript _zipup.vbs %1 %2で置き換えることにより、このファイルをパラメータ化できます。その場合、を呼び出すだけで、より簡単に呼び出すことができますCALL ZipUp C:\Source\Dir C:\Archive.zip


最初のzipファイルを作成する行はエスケープする必要があります。そうしないと、スクリプトで終了しません。
カップ

はい、これが方法です(スーパーユーザーの質問のように)。
Peter Mortensen

適切にエスケープされたバージョンを回答として追加しました。
fsteff

5

これらすべての解決策に問題があります。

それらは完全に同じではなく、すべてRMB --> send to --> compressed (zipped) folder同じソースフォルダーから作成された場合と比較してわずかにサイズが異なるファイルを作成します。私が持っていた最も近いサイズの違いは300 KBの違いです(スクリプト>マニュアル)。

powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip

(お知らせ-CompressionLevelの3つの値があります:最速、NOCOMPRESSION&最適には、(デフォルト:最適))

作業中のWordPressプラグインフォルダーを自動的に.zipアーカイブに圧縮する.batファイルを作成したいので、WordPressサイトにアップロードしてプラグインをテストできます。

しかし、いくつかの理由のために、それはこれらの自動圧迫のいずれかで動作しません、しかし、それは手動人民元の圧縮で作業を行い、魔女私は本当に奇妙見つけます。

また、スクリプトで生成された.zipファイルは、実際にはWordPressプラグインをアクティブ化できなくなるまで壊し、WordPress内から削除することもできません。サーバーの「裏側」にSSHで接続し、アップロードしたプラグインファイルを手動で削除する必要があります。手動でRMBで生成されたファイルは正常に動作しますが。


「wbr」「RMB」とは何ですか?
Peter Mortensen

RMB =右マウスボタン。<wbr> =ブラウザに「Word BReakオポチュニティ」を示すHTMLタグ(機能しなかったため削除されました)。
Sebastian Norr

4

スクリプトの一部としてこれを行う必要がある場合、Javaを使用するのが最善の方法です。binディレクトリがパスにあると仮定すると(ほとんどの場合)、コマンドラインを使用できます。

jar xf test.zip

Javaがパス上にない場合は、直接参照してください。

C:\Java\jdk1.6.0_03\bin>jar xf test.zip

3

オープンソースはあなたの友達です:-)

これが解凍です:http : //gnuwin32.sourceforge.net/packages/unzip.htm

ZIPコマンドもあります:http : //gnuwin32.sourceforge.net/packages/zip.htm

バイナリのダウンロードは十分です。


Windows 8では、エラーがスローされます。bzip2.dllがありません。
Doug、

1
@Dougは、bzip2がページの要件であり、ダウンロードへのリンクがあることを示しています
Sam

11
最初の質問は、標準の組み込みのWindowsコマンドを使用する方法でした。また、独自のツールまたはソリューションは、コンピューターの管理者権限を持つユーザー、またはシステムへの依存関係の増加のコレクションに関心がないユーザーに限定されているため、ユーザーにさまざまなサードパーティソリューションのインストールを要求することは望ましくありません。 。オープンソースはあなたの友人かもしれませんが、他のオープンソースパッケージをインストールする必要がある他のオープンソースパッケージをインストールする必要があるオープンソースパッケージなどは明らかに友人ではありません
Steve Hollasch

SourceForgeが私の作品のファイアウォールポリシーによってブロックされています:-(
SnookerC

1
これはまだ、サードパーティのsotwareを使用しています
ДеянДобромиров

3

これは、@ PodTech.ioによって提供された回答の更新バージョンです。

このバージョンでは、すべてのvbsコードがバッチファイルで正しくエスケープされています。また、バッチスクリプトのどこからでも1行で呼び出すことができるサブルーチンに作成されます。

:: === Main code:

call :ZipUp "C:\Some\Path" "C:\Archive.zip"


:: === SubRoutines:

:ZipUp
::Arguments: Source_folder, destination_zip
(
    echo:Set fso = CreateObject^("Scripting.FileSystemObject"^)
    echo:InputFolder = fso.GetAbsolutePathName^(WScript.Arguments.Item^(0^)^)
    echo:ZipFile = fso.GetAbsolutePathName^(WScript.Arguments.Item^(1^)^)
    echo:
    echo:' Create empty ZIP file.
    echo:CreateObject^("Scripting.FileSystemObject"^).CreateTextFile^(ZipFile, True^).Write "PK" ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, vbNullChar^)
    echo:
    echo:Set objShell = CreateObject^("Shell.Application"^)
    echo:Set source = objShell.NameSpace^(InputFolder^).Items
    echo:objShell.NameSpace^(ZipFile^).CopyHere^(source^)
    echo:
    echo:' Keep script waiting until compression is done
    echo:Do Until objShell.NameSpace^( ZipFile ^).Items.Count = objShell.NameSpace^( InputFolder ^).Items.Count
    echo:    WScript.Sleep 200
    echo:Loop
)>_zipup.vbs
CScript //Nologo _zipup.vbs "%~1" "%~2"
del _zipup.vbs
goto :eof

2

あなたはサードパーティのソフトウェアなしでこれをやろうとしていると言います。.NETの「サードパーティ」ソフトウェアを検討するかどうかはわかりません。

ただし、.NETで独自のコマンドラインユーティリティを作成できます。数行を超えるコードは必要ありません。

ZipFileクラス


0

@Jason Duffettの回答とそのコメントに加えて、ユーザーから入力と出力(それぞれファイル名とディレクトリ名)を取得するスクリプトを次に示します。

@echo off
set input=%1
set output=%2
powershell.exe "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('%input%', '%output%');"

使用法:

unzip.bat path\to\file.zip path\to\output\directory

-4

ファイルを圧縮するには:

C:\> zip -9 -m -o file.dat.zip file.dat
  • -9最大圧縮
  • -m正常な圧縮後に元のファイルを削除します
  • -o zipファイルの変更日を元のファイルと同じに設定します
  • 残念なことに、圧縮するファイルの名前に.zip拡張子を追加するのではなく、目的のzipファイルの名前を付ける必要があります。

4
2つのこと:(1)「zip」はWindowsで提供されていないため、おそらくサードパーティ製です。そして私の質問が述べたように、サードパーティをインストールできません。(2)希望する名前を指定する必要がある理由は、ファイルの作成とアーカイブ(シーケンス内のフォルダーのような)を圧縮し、そこに複数のファイルがある可能性があるためです。
Roee Gavirel、2015年

@RoeeGavirelサーバーでzipコマンドラインユーティリティが検出されたため、winzip GUIツールがインストールされていないため、Windowsには裸のCLIツールが付属しているようです。一方、compress、bzip2、gzipなどのUnix / Linux圧縮ユーティリティは、目的の名前を渡さない場合、元のファイルと同じ名前に拡張子(.Z、.bz2または.gz)を付けた圧縮ファイルを作成します。圧縮ファイル。
TulainsCórdova2015

-4

Expandコマンドを使用して、zipまたはネイティブ圧縮されたWindowsファイルを解凍できます。

expand MyFile.zip myFile

9
私はそれを試しましたが、MyFile.zipをmyFileフォルダにコピーします
fhnaseer '28 / 02/28

これは私を助けましたC:\> expand /?
snow6oy 2014

11
展開は.cabファイルでのみ機能し、zipファイルには適していません。
рüффп

2
ここに他のコメントを同上。Expand file.zip file拡張子なしでzipを別のファイルにコピーするだけです。ZIPをフォルダーに解凍しません。
デイブマーリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.