Edited at

Windowsのコマンドプロンプトなどで永続化したaliasを設定したい!


TL;DR

設定ファイルを設定ディレクトリに、alias命令文をalias命令ファイルに。

考え方を変換するのです。


はじめに

簡単にコマンドを作りたい!

そう考えた時、非Windowsユーザは .bashrc ファイルなどにaliasを設定すれば終わりです。

しかもファイルが消えない限り、そのシステム内では永久に使うことができます。

しかしWindowsユーザは困りました。

.bashrc ファイルなどという便利なものはありません。

ではどうしましょうか。

先人の知恵を借りてみます。


Windowsのコマンドプロンプトでaliasを設定する (cmderの設定含む)

https://qiita.com/little_hand_s/items/91d6bcb680eba10da835

Windowsのコマンドプロンプトでaliasっぽいのを登録できるようにする

https://qiita.com/analytics-hiro/items/7c2140bfca57cddbb859

Windows コマンドに Linux 風なエイリアスを登録して永続化させる

http://neos21.hatenablog.com/entry/2016/01/19/031150


要約すると、次の2種類の方法だそうです。


  • コマンドプロンプト起動時のショートカットで doskey コマンドを利用して設定ファイルを読込む

  • レジストリを利用して設定ファイルを読込む

ファイルをいじればいいからLinuxライクで、確かに便利そうです。


一方で、問題点もあります。


  • PowerShellではどうするの?

  • Bash on Windowsではどうするの?

  • ConEmuではどうするの?

  • Nyagosではどうするの?

つまり、Windowsのコマンドプロンプトだけでは物足りないユーザは、様々な代替コマンドプロンプトを使っており、上記の手法が使えない場合があります。

しかも、新しい代替ツールを試してみたいのに、その都度上記の設定をするのは面倒この上ありません。

ここでは、全く新しい方法で、aliasっぽい挙動を設定できる仕組みを提案したいと思います。


提案手法

既存の手法では、どれも1つのファイル内に設定を書いていました。

つまり、その設定ファイルを更新した場合、その設定ファイルを再読込みする必要がありました。

提案手法では、パスが通っている1つのディレクトリ内に設定を書いたバッチファイルやシンボリックリンクを置くようにします。

パスの中身は、コマンド実行ごとに読込むため、設定ファイルの再読込みという概念がありません。

また、パス自体は全てのシステム(コマンドプロンプトやPowerShellなど)で利用できるため、設定ファイルを複数作る必要性がなくなります。


バッチファイル

既存の手法によるalias設定が下記のようなものだとします。


既存の手法によるalias設定

alias original_command='command -option'


提案手法では、 コマンド名.bat をファイル名にし、コマンドをファイル内容として記述します。


original_command.bat

command -option


上記のファイルを、すでにパスを通したディレクトリ直下に置きます。


シンボリックリンク

Windowsにおける「ショートカット」をもっと柔軟にしたようなもの、と考えておけば大丈夫です。


Windowsでハードリンクやシンボリックリンクを作成する

https://qiita.com/opengl-8080/items/c2b6a93dfca5b61f9e6a


作りたいコマンド名をファイル名(拡張子無し)として、ショートカットを使いたい実行ファイルとリンクを作成します。

その際に、作りたいコマンドは、既にパスを通したディレクトリ直下に作るようにします。

例えば、 C:/commands ディレクトリにパスを通していて、 C:/Users/Owner1/Documents/OpenSSH-Win64/ssh.exessh コマンドとして利用したい場合、下記のようなコマンドを実行します。


コマンド

mklink C:/commands/ssh C:/Users/Owner1/Documents/OpenSSH-Win64/ssh.exe


すると、 C:/commands ディレクトリ直下に ssh シンボリックリンクを生成します。


注意点ですが、 mklink コマンドはコマンドプロンプト上でしか動きません。

PowerShellで利用する場合は、 cmd コマンドを実行後に上記のコマンドを打てば、コマンドプロンプト上で実行したことになります。

exit してPowerShellに戻りましょう。


おわりに

私はConEmu + Nyagos環境で主に開発していますが、時々コマンドプロンプトやPowerShellを使うこともあるため、複数環境の設定ファイルを作るのが面倒でした。

上記の手法を用いることで、環境非依存なパス環境を構築でき、ストレスなく開発できています(個人の感想です)。