web-dev-qa-db-ja.com

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

Windowsでは、いくつかのファイルをZipにすることができます。

右クリック - >送信先 - >圧縮(zip)フォルダ

そして、.Zipファイルをダブルクリックしてunzipを実行し、ファイルを抽出します。

スクリプト(.batファイル)からこれらの機能を適用する方法はありますか? サードパーティをインストールする必要なしに

253
Roee Gavirel

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

これを行うためのVBS方法については、このリンクを参照してください。 https://superuser.com/questions/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

74
Diryboy

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が必要です。

163
Jason Duffett

.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ファイルとして機能し、名前を付けて保存したり解凍したりします。

149
Steven Penny

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

jar -cMf targetArchive.Zip sourceDirectory

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

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

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

120
Noam Manos

PowerShell 5.0

Microsoft.PowerShell.Archive から使用できます。

例えば。:

  • Testフォルダー全体からresult.Zipを作成します。

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

    Expand-Archive -Path result.Zip -DestinationPath C:\Test
    
59

これは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の高度な使用方法

35

7-Zipを使う:

Zip :フォルダfooがあり、それをmyzip.ZipにZipします。

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

解凍 :現在のディレクトリ(myzip.Zip)に解凍します(./)。

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

私はこの正確な質問に答えることを探していました、そして私の調査から、DiryBoyの応答は正確であるようです。

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

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

ただし、GUIを介してネイティブに実行できるのであれば、コマンドライン内でバッチ、.vbs、またはその他の種類のスクリプトを使用して実行する方法があります。 WindowsにはZipファイルを作成するための 'send to'オプションがあるので、コマンドラインでそれを行う方法があることを知っていました、そして私はいくつかのオプションを見つけました。

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

https://superuser.com/questions/110991/can-you-Zip-a-file-from-the-command-Prompt-using-only-windows-built-in-capabili

複数のファイルやフォルダを入れ子にしたディレクトリでテストしましたが、問題なく動作しました。コマンドラインのフォーマットに従ってください。

私が見つけたコマンドラインでファイルを解凍する方法もあります。 1つの方法は、zipファイルの内容が何であるかを示すExplorerウィンドウを開くだけです。これらの中には、必ずしもウィンドウにネイティブではないJavaを使用しているものもありますが、非常に一般的であるため、ほぼそうです。

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

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

8
LostUser

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

サードパーティのツールや依存関係は不要です。 SOURCEDIROUTPUTZIPを設定するだけです。

ファイル名: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を呼び出すだけで呼び出すことができます。

6
PodTech.io

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

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

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

Binariesのダウンロードで十分です。

3
JanBorup

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

jar xf test.Zip

javaが直接パス参照に含まれていない場合

C:\Java\jdk1.6.0_03\bin>jar xf test.Zip
2
eddyoc

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

しかし、あなたは.NETであなた自身のコマンドラインユーティリティを作成することができます。数行以上のコードを必要とするべきではありません。

https://msdn.Microsoft.com/ja-jp/library/system.io.compression.zipfile(v=vs.110).aspx

1
NL3294

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

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

-CompressionLevelに注意してください。 つの可能な値があります :Fastest、NoCompression&Optimal、(デフォルト:Optimal))

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

しかし、何らかの理由で、これらの自動圧縮のいずれでも動作しませんbut手動RMB圧縮では動作します。

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

0
Sebastian Norr