ファイルを圧縮してzipファイルとする方法とzipファイルを解凍する方法について紹介します。
今回はフリーソフト等は使わず、Windowsの標準の状態でできることを紹介します。
また、パスワードを付ける、外すということも除外します。
やり方は以下2つの方法があります。
①Invoke Power Shellを使う(PowerShell5.0以上であること)
②Invoke Methodを使う
まずPower Shellを使って圧縮、解凍をする方法を紹介します。
一応、WindowsのメニューでPowerShellと検索して、PowerShellを開き、「$PSVersionTable」と入力して、バージョンを確認してから始めてください。
5未満の場合は、今回のコマンドが使用できませんのでご容赦ください…
さて、本題に入りまして、今回はPowerShellの「Compress-Archive」と「Expand-Archive」というコマンドを使用します。
UiPathのアクティビティとしてはInvoke Power Shellを使用しますので、こちらもご参照ください。
【圧縮方法】
圧縮ではCompress-Archiveというコマンドを使い、以下のようなオプションを使用します。
-Path 圧縮するファイルパス配列
-DestinationPath 圧縮先ファイルパス
これを踏まえてサンプルとして、書いてみると
Compress-Archive -Path C:\test\zip\aa.txt -DestinationPath C:\test\zip\test.Zip
という感じになります。aa.txtというファイルを圧縮して、test.zipというファイルを作成するという感じです。
実行前は以下のような感じです。
これをUiPathのInvoke Power Shellを使って実装してみたいと思います。
実装方法はスクリプトで書くパターンとパラメータで書くパターンの2つがあります。(詳しくはこちらを参照)
・スクリプトで書く場合
Command Textにそのままコマンドを全文入力する。
IsScriptにチェックをつける。
・パラメータで書く場合
Command Textには”Compress-Archive”のみ入力
IsScriptのチェック外す
ParametersにPathとDestinationPathの情報を入力する
Pathの内容を変えれば、フォルダごと圧縮したり、複数ファイルを圧縮したり…などもできます。
【解凍方法】
解凍ではExpand-Archiveというコマンドを使い、以下のようなオプションを使用します。
-Path 圧縮ファイルパス
-DestinationPath 解凍先パス
これを踏まえてサンプルとして、書いてみると
Expand-Archive -Path C:\test\zip\test.Zip -DestinationPath C:\test\zip
という感じになります。test.ZipというファイルをC:\test\zip内に解凍するという感じです。
実行前は以下のような感じです。
これを圧縮と同じようにUiPathで実装します。
・スクリプトで書く場合
Command Textにそのままコマンドを全文入力する。
IsScriptにチェックをつける。
・パラメータで書く場合
Command Textには”Expand-Archive”のみ入力
IsScriptのチェック外す
ParametersにPathとDestinationPathの情報を入力する
続いて、Invoke Methodを使った方法について紹介します。
まず、準備として、対象のxamlファイルをテキスト形式(メモ帳など)で開き、以下の1文を挿入します。
<AssemblyReference>System.IO.Compression.FileSystem</AssemblyReference>
そしてUiPathで先ほどのファイルを開きます。
【圧縮方法】
Invoke Methodのアクティビティを選択し、以下のように設定します。
TargetType:System.IO.Compression.ZipFile
MethodName:CreateFromDirectory
Parameter:In-String-“圧縮するフォルダパス”
In-String-“圧縮先ファイルパス”
今回はaaaフォルダを圧縮して、bbb.zipを作成しようと思います。
<実行前>
これでaaaフォルダを圧縮した、Zipファイルが作成されました。
もしZipファイルを解凍したら、中が文字化けしていた!という場合は、Parameterを以下のように設定してみてください。
In-String-“圧縮するフォルダパス”
In-String-“圧縮先ファイルパス”
In-System.IO.Compression.CompressionLevel-0
In-Boolean-False
In-System.Text.Encoding-system.Text.encoding.getEncoding(“shift_jis”)
【解凍方法】
Invoke Methodのアクティビティを選択し、以下のように設定します。
TargetType:System.IO.Compression.ZipFile
MethodName:ExtractToDirectory
Parameter:In-String-“圧縮ファイルパス”
In-String-“解凍先パス”
今回はbbb.zipを解凍して、aaaフォルダに置こうと思います。
<実行前>
もし解凍したファイルをみたら文字化けしていた!という場合は、Parameterを以下のように設定してみてください。
In-String-“圧縮ファイルパス”
In-String-“解凍先パス”
In-System.Text.Encoding-system.Text.encoding.getEncoding(“shift_jis”)
以上、ファイルを圧縮してzipファイルとする方法とzipファイルを解凍する方法でした。
最初にも書きましたが、どちらの方法もパスワードには対応してません。フリーソフトをいれればまた別のアプローチもできるかと思います。
フォルダ開いて、右クリック>すべて展開というのを泥臭く実装するという方法も出来なくはないかと…!