Windowsでは、いくつかのファイルを
右クリック→ 送信 → 圧縮(zip形式)フォルダ
そして、.zip
ファイルをダブルクリックして解凍し、ファイルを抽出します。
サードパーティのソフトウェアをインストールせずに、スクリプト(.batファイル)からこれらの機能を適用する方法はありますか?
Windowsでは、いくつかのファイルを
右クリック→ 送信 → 圧縮(zip形式)フォルダ
そして、.zip
ファイルをダブルクリックして解凍し、ファイルを抽出します。
サードパーティのソフトウェアをインストールせずに、スクリプト(.batファイル)からこれらの機能を適用する方法はありますか?
回答:
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を参照して ください
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が必要です。
'.'
。例:powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
& {}
何ですか?PS5でもこれは機能します。– powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
とおり、.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行については、bar
とfoo
あなたが持っているフォルダ、または任意の名前は、既存のフォルダであることを伝えたい名前に置き換えることができます。foo.zip
どちらの場合も、保存または解凍するzipファイルとして機能します。
Javaがインストールされている場合は、jar
次のコマンドを使用してZIPアーカイブに圧縮できます。
jar -cMf targetArchive.zip sourceDirectory
c =新しいアーカイブファイルを作成します。
M =マニフェストファイルをアーカイブに追加しないことを指定します。
f =ターゲットファイル名を示します。
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
powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zip
たどり着く人なら、スクリプトを作成しなくてもコマンドラインから直接使用できます(Powershell v5がインストールされていれば、少なくともWindows 7に戻ることができます)。
これは正確には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"
7-Zipの使用:
Zip:フォルダがありfoo
、zipしたいmyzip.zip
"C:\Program Files\7-Zip\7z.exe" a -r myzip.zip -w foo -mem=AES256
Unzip:myzip.zip
現在のディレクトリ(./
)に解凍します()
"C:\Program Files\7-Zip\7z.exe" x myzip.zip -o./ -y -r
without the need to install any 3rd party
私はこの正確な質問に答えるために探していました、そして私の研究から、ディリーボーイの反応は正確であるようです。
私は、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
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
。
これらすべての解決策に問題があります。
それらは完全に同じではなく、すべて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で生成されたファイルは正常に動作しますが。
オープンソースはあなたの友達です:-)
これが解凍です:http : //gnuwin32.sourceforge.net/packages/unzip.htm
ZIPコマンドもあります:http : //gnuwin32.sourceforge.net/packages/zip.htm
バイナリのダウンロードは十分です。
これは、@ 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
あなたはサードパーティのソフトウェアなしでこれをやろうとしていると言います。.NETの「サードパーティ」ソフトウェアを検討するかどうかはわかりません。
ただし、.NETで独自のコマンドラインユーティリティを作成できます。数行を超えるコードは必要ありません。
@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
ファイルを圧縮するには:
C:\> zip -9 -m -o file.dat.zip file.dat
Expandコマンドを使用して、zipまたはネイティブ圧縮されたWindowsファイルを解凍できます。
expand MyFile.zip myFile
Expand file.zip file
拡張子なしでzipを別のファイルにコピーするだけです。ZIPをフォルダーに解凍しません。