Automation Anywhere 便利なシステム変数一覧

# 概要
Automation Anywhere では、コマンドの追加の際に表示されるダイアログボックスにて、コマンド引数にテキストや変数を指定できます。この引数の中で指定できる変数には、ボット単位で指定しておく「**ローカル変数**」と、システムが定義している「**システム変数**」(そして、厳密にいうとシステム定義済みの「**システム定義済みローカル変数**」も存在します)があります。

システム変数は、現在の日時やOSの環境変数、クリップボードの内容、そしてLoop処理、Excel / Email / PDF などの特定の処理の中で状態の参照をするための変数です。

![aa-client.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7938d7b7-ca49-c3c9-80d8-ecb90f22e669.jpeg)

システム変数を含む「利用可能な変数一覧」は、コマンドダイアログボックスの引数テキストボックスで`F2`を押すことで一覧表示させることができますが、ここでは、そのうちよく使うものを一覧にしておきます。

![input-argument.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/3ba40a59-9207-3315-ad1c-fc4849e9c60c.png)

ちなみに、変数はテキストの中で$で囲まれた文字列として表現されます。(例: Monthという変数は`$Month$`と表現されます)

![variable-dialogbox.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/e77e929b-61d7-0d4b-f6cb-75ff71361d1c.png)

# ファイル名、ディレクトリ名に関するもの
Loop 処理の中でファイルを列挙した場合に、ファイルに関する情報を取得します。(Loop処理の中での列挙時以外は空白を返します)

* `$CurrentDirectory$`: カレントディレクトリを取得します。最後のバックスラッシュは入りません。例: `C:\Users\(User名)\Desktop`
* `$FolderName$`: ファイルのフォルダー名を取得します。最後のバックスラッシュは入りません。例: `C:\Users\(User名)\Desktop`
* `$FileName$`: ファイルのファイル名 (拡張子除く)を取得します。例: `sample`
* `$Extension$`: ファイルの拡張子を取得します。例: `txt`

また、OSの特定のフォルダー名も取得が可能です。これはいつでも参照できます。Windowsの環境変数に詳しい方であれば、しっくりくるでしょう。

|変数名|説明|出力例|
|:-------|:---------------------------|:--|
| `$System(Path)$`| パスが通っている (コマンドラインから呼び出し可能)ディレクトリ一覧がセミコロン区切りで列挙されます。|(長いので後述)|
| `$System(windir)$`| Windows ディレクトリを取得します。|C:\WINDOWS|
| `$System(TMP)$`|テンポラリディレクトリを取得します。|C:\Users\\(User名)\AppData\Local\Temp|
| `$System(TEMP)$`|(同上)|C:\Users\\(User名)\AppData\Local\Temp|
| `$System(SystemDrive)$`|システムドライブを取得します。|C:|
| `$System(HOMEDRIVE)$`|ホームドライブを取得します。|C:|
| `$System(SystemRoot)$`|システムルートディレクトリを取得します。|C:\WINDOWS|
| `$System(ProgramFiles)$`| プログラムファイルディレクトリを取得します。|C:\Program Files (x86)|
| `$System(ProgramFiles(x86))$`| 32 bit版プログラムファイルディレクトリを取得します。|C:\Program Files (x86)|
| `$System(CommonProgramFiles)$`| 共通プログラムファイルディレクトリを取得します。|C:\Program Files (x86)\Common Files|
| `$System(ProgramW6432)$`| 64 bit版プログラムファイルディレクトリを取得します。|C:\Program Files |
| `$System(CommonProgramW6432)$`| 64 bit版共通プログラムファイルディレクトリを取得します。|C:\Program Files (x86)\Common Files|
| `$System(PROGRAMDATA)$`| プログラムデータディレクトリを取得します。|C:\ProgramData|
| `$System(USERPROFILE)$`| ユーザープロファイルディレクトリを取得します。|C:\Users\\(User名)|
| `$System(APPDATA)$`| AppDataディレクトリを取得します。|C:\Users\\(User名)\AppData\Roaming|
| `$System(LOCALAPPDATA)$`| ローカルAppDataディレクトリを取得します。|C:\Users\\(User名)\AppData\Local|
| `$System(OneDrive)$`| OneDriveのルートフォルダーを取得します。|C:\Users\\(User名)\OneDrive|
| `$System(PSModulePath)$`| PowerShell関係のディレクトリの一覧がセミコロン区切りで列挙されます。|(長いので後述)|


```XML:\$System(Path)\$出力例
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Users\(User名)\AppData\Local\Microsoft\WindowsApps;
```

```XML:\$System(PSModulePath)\$出力例
C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\PowerShell\Modules\
```

# 現在の日時に関するもの
現在の日時についていつでも参照できます。

* `$Year$`: 現在の年。例: 2019
* `$Month$`: 現在の月。例: 3
* `$Day$`: 現在の日。例: 31
* `$Date$`: 現在の年月日をフォーマットして返す。デフォルトは `mm/dd/yyyy HH:mm:ss` のフォーマットで、システム変数一覧ダイアログボックスで与えられた一覧の中から選択できる。日本でなじみのあるフォーマットはあまりない(注)。例: 03/31/2019 10:02:04
* `$Hour$`: 現在の時。例: 10
* `$Minute$`: 現在の分。例: 2
* `$Second$`: 現在の秒。例: 4
* `$Millisecond$`: 現在のミリ秒。例: 962

(注) `$Date$`が出力するフォーマットはシステム変数ダイアログボックスで変更できますが、これは`$System(USERPROFILE)$\Documents\Automation Anywhere Files\AA.Settings.xml`に格納されます。`configuration\Editor\systemvariable\customdateformat`にフォーマットテキストの形で格納されていることがわかります。

```XML:AA.Settings.xml
<configuration>
  <Editor>
    <systemvariable>
      <customdateformat>mm/dd/yyyy HH:mm:ss</customdateformat>
    </systemvariable>
```
このフォーマットを手で書き換えて保存し、Clientを再起動すると`$Date$`が出力するフォーマットを変更することができます。
ためしに、`yyyy/mm/dd HH:mm:ss`のように値を変更してみると、2019/03/31 10:02:04と期待通りの出力結果になりました。それでは、時刻のない`yyyy/mm/dd`や、和暦のフォーマット`gy/mm/dd HH:mm:ss`ではどうかと試してみましたが、残念ながら2019/03/31 10:02:04という出力結果となってしまいました(システム変数ダイアログボックスでは変更されたフォーマット文字列は表示されていた)。その他もいろいろ試してみましたが、どうやら既定のフォーマットにない文字列になっている場合は、`yyyy/mm/dd HH:mm:ss`として出力するようになっているようです。

> 標準でサポートのないフォーマットを使いたい場合は、Bot Store の拡張機能を使います。詳しくは「[【Automation Anywhere】高度な日付処理 Meta Bot 2選](https://qiita.com/Okura_/items/549612aab7e04e47d6d4)」 by @Okura_ さんを参照ください。


# OS や実行環境の環境変数
実行環境についての情報をいつでも参照できます。

* `$Machine$`: 実行環境のマシン名。
* `$OSName$`: 実行環境の OS 名。例: Microsoft Windows 10 Pro 64-bit
* `$AATaskName$`: 実行環境のタスクファイルの名前。例: `C:\Users\(User名)\Documents\Automation Anywhere Files\Automation Anywhere\My Tasks\Sample.atmx`
* `$AAControlRoom$`: 実行環境のControl RoomのURL。例: `http://localhost`

その他、メモリ搭載量やプロセッサ名なども参照する変数があります。


# その他
その他のシステム変数一覧はAutomation Anywhere のサイトに記載があるので適宜参照してください。

* [システム変数 - Automation Anywhere 製品ドキュメント](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/system-variables.html)
    * [日付と時刻](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/date-and-time-system-variables.html)
    * [ループ](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/loop-system-variables.html)
    * [Excel](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/excel-system-variables.html)
    * [メール](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/email-system-variables.html)
    * [トリガー](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/trigger-system-variables.html)
    * [PDF](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/pdf-system-variables.html)
    * [システム設定/パラメーター](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/system-related-system-variables.html)

# 参考記事
こちらの記事でも日本語でまとまっていますので、ご参考まで!

* [Automation Anywhere - 変数](https://licensecounter.jp/engineer-voice/blog/articles/20190912_automation_anywhere_variables.html)