やりたいこと
フォルダ内のファイル・サブフォルダをすべてコピーする
コピー元フォルダ内には3つのExcelファイルと2つのサブフォルダがあるとします。
すべてのファイルとサブフォルダを一括でコピーして、
コピー先フォルダ内にコピーをする処理を行いたいと思います。
コピーする方法はいくつかあると思います。
例えば、コピー元フォルダ内のファイルパスをすべて取得して、
繰り返し処理で順番にコピーしていく方法なども可能です。
しかし、この方法だとアクティビティの数が多くなり、ファイル数が多い場合は時間も多少かかってしまいます。
できれば、1つのアクティビティで簡単に処理をしたいものです。
今回はInvoke Power Shellというアクティビティを使って、
フォルダ内のファイルをすべてコピーしたいと思います。
Invoke Power Shellを使うことで、Power Shellの機能を使用することができるようになります。
ちなみにUipathではCopy Fileアクティビティというものが用意されていますが、
このアクティビティではファイルパスを指定する必要があり、フォルダごとコピーするということはできませんでした。
Power Sellとは
PowerShellとは、Microsoftが開発したスクリプト言語で、
WindowsOSへ直接コマンド命令を行うことができます。
例えば、今回のやりたいことをPower Shellを使ってやってみましょう。
プログラムからPowerShellを開いて、以下のように入力するとフォルダ内のデータをすべてコピーすることができます。
Copy-Item "C:\コピー元" "C:\コピー先\コピー元" -Recurse
-Recurseはフォルダの中身も全部コピーするというオプションです。
他にも様々な処理をすることができるので、気になる方はPowerShellの使い方を調べてみてくださいφ(..)
Invoke Power Shellの使い方
それではInvoke Power Shellアクティビティを使って、実際に処理を行ってみましょう。
冒頭で説明した通り、コピー元フォルダをすべてコピー先フォルダにコピーします。
まずはInvoke Power Shellアクティビティを配置しましょう。
プロパティからスクリプト入力にチェックが入っていることを確認します。
TypeArgumentについては、今回はデフォルトのままで問題ありません。
次にアクティビティの中にコマンドを入力します。
Power Shellでは以下のコマンドを入力しました。
Copy-Item "C:\コピー元" "C:\コピー先\コピー元" -Recurse
Invoke Power Shellアクティビティで注意が必要なことは、
テキストは引用符で囲む必要があるということです。
"Copy-Item ""C:\コピー元"" ""C:\コピー先\コピー元"" -Recurse"
引用符が多くなり見づらくなってしまいますが、このように入力することで処理が実行されます。
コマンドの入力ができたら実行してみてください!
無事にすべてのファイルがコピーできましたか?
コマンドに変数を使いたい場合
ファイルパスを変数に入れてコマンドを入力したい場合は、
以下のように変数を&で囲むことで入力することができます。
"Copy-Item "& strコピー元 &" "& strコピー先 &" -recurse"
ひとこと
Power Shellには今回使用したファイルコピー以外にも様々な機能があります。
Invoke Power Shellアクテビティを使うことで開発の幅が大きく広がると思うので、ぜひ試しに使ってみてください!(^^)!
何でも出来てしまう反面、使いすぎるとフロー図で処理を行うというRPAの強みを損なってしまう可能性もあるので、使いどころは見極めが必要になるかもしれません。
個人的には今回のように、短いスクリプトでUiPathの苦手なことがカバーできる時には有効に使えると感じました。
他にもファイル・フォルダ操作について紹介しているので、ぜひ参考にしてみてください!