UNIX系のインタラクティブシェルでは、特定のパスに移動する(cdコマンドで移動する)操作にエイリアスを設定することがある。いちいちパスを入力しなくてよいので、毎日操作するならエイリアスを設定しておいたほうが便利だからだ。実は、PowerShellでも関数を設定することで、同様のことができる。今回はそうした設定の例を紹介しよう。自分の使い方に合わせて応用してもらえれば幸いだ。

まず、次のスクリーンショットをご覧いただきたい。

ディレクトリ名に注目

上記スクリーンショットではディレクトリ名が日付になっている。こんな感じでデータを連番の数字で管理することは少なくないだろう。日付だけのこともあれば、日付にさらに連番の数字を付記することもある。多くの場合、「番号が増えるとより新しいデータ」という形式が使われているように思う。

こうしたディレクトリに移動する場合、対象となるディレクトリの名前を入力するわけだが、日付や連番を正確かつ高速に入力するには結構スキルが必要だ。業務で数字の入力に慣れているようであれば、テンキーを使って素早く入力できると思うのだが、慣れてない人がテンキーではなく、キーボードの上部に横一列に並んでいる数字キーで入力するというケースでは、入力ミスも多くなる。

そんな場合に役立つ、ちょっとした設定がある。例えば、先ほどの日付ディレクトリの場合、dirコマンドの出力では新しいデータほど下に表示されることになる。

新しい日付ほど下に表示される

業務上、新しいデータほどアクセスする頻度が多いとすれば、dirコマンドの最後に表示されるディレクトリに移動する操作が多いことになる。それならば、「一番新しい日付ディレクトリへ移動」「1つ前の日付ディレクトリへ移動」「2つ前の日付ディレクトリへ移動」といったようなショートカットを用意しておけば入力ミスも減り、移動が楽になる。

では、どんな処理をすればよいか追ってみよう。まず、日付名のディレクトリだけが欲しいので、次のようにSelect-Stringコマンドレットでdirコマンドの出力を絞る。

Select-Stringコマンドレットで、dirコマンドの出力を絞り込む

Select-Stringコマンドレットでdirコマンドの出力を絞り込む

ここでは「一番新しい日付のディレクトリ名」、すなわち一番最後の行を取得したいと仮定しよう。上記スクリーンショットであれば「20200109」という名前のディレクトリだけが得られればよい。そこで、次のように配列として扱って「[-1]」と指定し、最後の行だけ抜き出す。こうした指定ができるのが、PowerShellの強みだ。

最後の1行だけを抜き出す

指定するインデックスを「-2」にすれば1つ前の日付が得られるし、「-3」にすればさらにそれよりも前の日付が得られる。

インデックスを変えれば得られるデータが変わる

得られたものをそのままcdの引数に書いておけば、次のように移動できる。

最新の日付ディレクトリへ移動する処理

では上記処理を「cd1」という関数として定義しよう。定義/実行すると、次のようになる。

「cd1」という関数に定義して実行してみる

cd1関数で「一番新しい日付名のディレクトリへ移動」という処理が機能していることがわかる。同じ要領で、cd2、cd3、cd4、cd5、cd6… といった関数を作成しておけば、dirで表示されたディレクトリに下から順に移動するショートカットが可能になる。入力量が少なくて済む、便利な設定だ。

設定サンプルと動作例

先ほどの移動ショートカットを設定ファイルに書くとすれば、次のような感じになる。

function cd1 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-1] }
function cd2 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-2] }
function cd3 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-3] }
function cd4 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-4] }
function cd5 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-5] }
function cd6 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-6] }
function cd7 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-7] }
function cd8 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-8] }
function cd9 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-9] }
function cd10 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-10] }
function cd11 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-11] }
function cd12 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-12] }
function cd13 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-13] }
function cd14 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-14] }
function cd15 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-15] }
function cd16 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-16] }
function cd17 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-17] }
function cd18 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-18] }
function cd19 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-19] }
function cd20 { cd (dir | Select-String -Pattern '[0-9]{8}$')[-20] }

実行すると次のようになる。

ショートカット移動の設定例

「cd1」で最新のデータ、「cd2」でひとつ前のデータ、「cd3」でさらにもう1つ前のデータが収められているディレクトリへの移動となる。上記のようなスタイルでデータをデプロイしてある場合、この設定はかなり便利なのでお薦めである。移動にかかるストレスを大きく低減できるはずだ。

今回は日付形式のディレクトリ名を採用していることを前提とした設定を紹介したが、日付形式の部分は読者の使い勝手に合わせて変更してもらえればと思う。ぜひ一度、自分のよく使うディレクトリ名に合わせて試していただきたい。