web-dev-qa-db-ja.com

外部ツールを使用せずにWindowsに組み込まれた圧縮コマンド

私はWindows(7以降)のコマンドライン圧縮とアーカイブコマンド/スクリプトが必要です。これは、Windowsスクリプト作成者ではないため、PowerShellなどの外部ツールやユーティリティを必要としません。 Unix/Linux Zip/tarコマンドのように、完全に独立している必要があります。

このタイプのコマンドまたはスクリプトをたくさん検索しましたが、まだ見つかりませんでした。誰かがこのようなものを見つけましたか?

1
Vicky Dev

PowerShellを利用するために、エキスパートのスクリプトライターである必要はありません。また、明示的なPowerShellスクリプト(またはそのIDEインターフェイス)を利用する必要もありません。 )使用するにはPowerShellコマンド—PowerShellコマンドを利用して、それらをバッチスクリプトロジックの一部にして実行および使用できます。

私はあなたがタスクを完了するためのWindowsネイティブの方法を探していると思います、そしてあなたはそれが本当にWindowsにネイティブであり、から動作することを確認したいだけですWindows 7以降(新しい)。


圧縮とアーカイブ

Windows 1およびWindows 7から機能し、古いバージョンのPowerShellおよび同様に機能するロジックを使用するバッチスクリプトを以下に作成しました。古いロジックを使用した場合に備えて、新しいバージョン。

ドラッグアンドドロップ

圧縮するフォルダをバッチスクリプトにドラッグするだけで、Zipファイルとしてアーカイブされ、同じ場所に新しいZipファイルが作成されますが<foldername you archive>.Zip so C:\User\User\Desktop\New Folderをスクリプトにドラッグすると、C:\User\User\Desktop\New Folder.Zipが作成されます。

フォルダをスクリプトにドラッグ

enter image description here

後で作成

enter image description here

スクリプト

注:スクリプトに2つの変数をコメントアウトしたままにしているので、それらを使用してソースフォルダーを設定し、ドラッグアンドドロップ方式を使用するのではなく、必要に応じて宛先ファイル名を明示的に指定します。

PowerShellロジックのアイデアへのソースリンク

@ECHO ON

::SET src_folder=C:\Users\User\Desktop\Test
::SET destfile=C:\Users\User\Desktop\Test.Zip

SET src_folder=%~1
SET destfile=%~FN1.Zip

:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")>>"%PSScript%" 
ECHO $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal         >>"%PSScript%" 
ECHO $includebasedir = $true                                                       >>"%PSScript%" 
ECHO [System.IO.Compression.ZipFile]::CreateFromDirectory("%src_folder%", "%destfile%", $compressionLevel, $includebasedir)>>"%PSScript%" 

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

EXIT

解凍と抽出

また、Windows 1およびWindows 7から機能し、万が一の場合に備えて、古いバージョンのPowerShellと新しいバージョンで機能するロジックを使用するバッチスクリプトを以下に作成しました。古いロジックを使用しました。

ドラッグアンドドロップ

解凍するZipファイルをスクリプトにドラッグするだけで、ファイルの内容がスクリプトにドラッグしたZipファイルと同じフォルダーに抽出されます。したがって、C:\User\User\Desktop\ZipMe.Zipがあり、ZipMeという名前のフォルダが含まれている場合、スクリプトにドラッグアンドドロップすると、フォルダZipMeからC:\User\User\Desktop

Zipファイルをスクリプトにドラッグ

enter image description here

後で抽出

enter image description here

スクリプト

重要:圧縮とアーカイブスクリプトの変数上記(最初のスクリプトが一番上)$includebasedir = $trueとして表示され、実際のフォルダとその中のコンテンツを圧縮するように指示します。代わりにこの値が$falseに設定されている場合、またはフォルダーを含まないZipから抽出する場合、以下のスクリプトはすべてのファイルとその他のコンテンツをZipファイルが存在する同じフォルダーに抽出します。 Zipファイルに含まれているもので、ファイル内に親フォルダーが含まれていない場合は、フォルダーが抽出されます。

注:スクリプトに2つの変数をコメントアウトしたままにしているので、それらを使用して宛先フォルダーを設定し、ドラッグアンドドロップ方式を使用するのではなく、必要に応じて明示的にZipファイル名を指定します。

@ECHO ON

::SET dest_folder=C:\Users\User\Desktop\New folder
::SET Zip_file=C:\Users\User\Desktop\Test\test.Zip

SET dest_folder=%~DP1
SET Zip_file=%~1

:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.Filesystem")>>"%PSScript%" 
ECHO [io.compression.zipfile]::ExtractToDirectory("%Zip_file%", "%dest_folder%")   >>"%PSScript%" 

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

GOTO :EOF

その他のリソース

1
Pimp Juice IT

少なくともWindows7(およびXP ... Windows 10の状態についてはまだよくわかりません)には、「MicrosoftCompressedFolders」サポートによって提供されるZip圧縮サポートと連携するためのコマンドラインインターフェイスがありません( Explorerが使用できるもの)。

ただし、これを行うには、スクリプトファイルを作成し、Windows XP以降(「Microsoft圧縮フォルダー」のサポートと同様)に組み込まれているWindows Script Hostを使用します)。

たとえば、 Peter Mortensenの回答 は、作成可能なバッチファイルの内容を示しています。これにより、8行のVBScriptが書き出され、「MicrosoftCompressedFolders」サポートが利用されます。

最後の「sleep2000」は2秒間だけ一時停止し、 George Yockeyのアプローチ (アクティブな圧縮をチェックする)または.Count(-のようなもの)をチェックするほど安全ではないことに注意してください。 kayleeFrye_onDeckの提出 )。

WSHベースの回答が、PowerShellが必要ないと言ったときに意図した目標に違反しているかどうかはわかりませんが、実際にはPowerShellをまったく使用していません。

1
TOOGAM