Power Automate(Desktop)でフローを作成する際、「ダウンロード」もしくは「デスクトップ」フォルダーの直下に置いてあるファイルを読み込みたいが、下記のように環境によってファイルパスが変わるパターンをどう対応したらいいかわからない時に使える方法についての記録になります。
ダウンロードフォルダーのパス
C:\Users\【アカウント名】\Downloads\test.txt
デスクトップフォルダーのパス
C:\Users\【アカウント名】\Desktop\test.txt
アカウント名をWindowsでログインしたアカウント名によってパスが変わり、「test.txt」ファイルを読み取ることができるようにしてみようと思います。
まず、読み取るファイルを作成
Power Automate Desktop(以下、PAD)で読み取るファイルを事前に作成しておく
読み取った以下の内容をメッセージボックスに出力するのか最終目的である
アカウント名を取得してみよう!
サインインしているWindowsのアカウント名を取得するにはPowerShellを使えば簡単にできるることがわかった
アクションメニューの「スクリプト」ー「Powerwshellスクリプトの実行」を追加する
スクリプトに入力するコマンドは以下の通り。
返却値は「スクリプトの出力」のみでOK
whoami
コマンドを訳すると、「私は誰ですか?」
ふむふむ、、、
意外とシンプルすぎてこのコマンドを探すのにかかった時間がもったいないぐらいだ、、
PowerShellから出力された結果を見やすく確認するためにメッセージボックスを使ってみよう
「実行」ボタンクリック
よっしゃー!アカウント名「mypc」が取れたぞー
出力結果のテキストから分割する必要があるが、これぐらいは楽勝だ!
テキストを分割する
アクションメニューの「テキスト」ー「テキストの分割」を使おう
以下の通りにセットして
(生成される変数名を「dividedText」にした)
おおー、スムーズにできるもんだー
変数「dividedText」はリストタイプで保存されるので
dividedText[0] -> "myhome"
dividedText[1] -> "mypc"
になるはず。
確認のため、メッセージボックスに出してみた
想定の通り、表示された!
が、あとでテストした際にわかったのは「dividedText[1]」をそのまま使えないことだった
入力値:C:\Users%dividedText[1]%\Desktop\test.txt
想定値:C:\Users\mypc\Desktop\test.txt
実際の結果:C:\Users\mypc
\Desktop\test.txt
上記「実際の結果」を見たらわかるが、なぜか改行が入っている、、
どうにかしなくちゃ、、
テキスト前後にトリミング処理をする
「トリミング」アクションを使って変数に格納されているテキストの前後に存在する不要なやつは消してみよう
アクションメニューの「テキスト」ー「テキストのトリミング」
先頭と末尾の空白文字をトリミングでセット
これで改行コードは削除されるはず!
ファイルからテキストを読み取る
最後に、ファイルを読み取ってみよう
アクションメニューの「ファイル」ー「ファイルからテキストを読み取る」を選択
ファイル パス欄にトリミングして得た変数「accName」を設定した
これで、どのアカウント名でも対応ができるはず!
fileから読み取ったテキストをメッセージボックスに表示設定
さっそく、テストしてみよう!
大成功!
追記--------------------------------------
「デスクトップ」フォルダーに関してはPowerShellに以下のコマンドを入力することで簡単に取得できることがわかりました。
[Environment]::GetFolderPath([Environment+SpecialFolder]::desktop)