コマンドプロンプトで永続的なエイリアスを作成する
TL;DR
本編
序章
窓の桜にも緑が目立つ昼下がりです。僕は半身に春の色を浴びながら、目の前の黒窓がgit clone
しているのをじっと見守っていました。
黒窓が仕事を終えたことを目配せして伝えます。僕はひとつ頷くと、彼にcd <repo-name>
と告げました。そして、まるで生まれる前からそうすべきと知っていたかのように、何年も前からずっとそうし続けてきたかのように、僕はこう続けたのです:
vscode .
黒窓は応えました:
'vscode' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
……は?
当然。そう、当然 VSCode の実行ファイル名はvscode.exe
であるはずだと思い込んでいました。そうじゃなかったらなんなんだ。
何かに急かされるようにディレクトリを掘り進んでいくと、そこにヤツはいました。不敵な笑みを浮かべ、僕を待ち構えていたヤツの名はそう……
なんで😡😡😡😡😡💢💢💢
エイリアスを作ろう
いや、 MS のおもしろセンスは今に始まったことではありません。あいつらは Visual Studio の実行ファイルにdevenv.exe
と名付けるような集団です。
いいのです、そんなことは。僕らにはエイリアスがあります。bash にあるんだから cmd にだってどうせあります*1。Google 先生に聞けば doskey コマンドを使った方法が山とヒットしました。
doskey で得られるエイリアスは cmd が実行終了するまでの一時的なものです。したがってエイリアスを永続化するには、まずエイリアスを登録する bat を予め書いておき、cmd の起動時に引数で bat を渡すことになります。……え?いちいち渡すの*2?.bashrc
みたいなのって cmd にはないんですか?
どうやら cmd 起動時に設定ファイルを自動で走らせるためにはレジストリを弄る必要があるそうです*3。レジストリはあんまり触りたくないなあ……。
最近覚えたものを使いたがる小学生としてここはひとつ、bat を使ってエイリアスをアレするものを作ればいいのでは?
作った
で、作りました。解説するほどのものでもないのでコードだけペタッと貼ります:
@echo off setlocal enabledelayedexpansion set programName=%0 set aliasDir=パスの通った空のディレクトリ call :main %* goto :EOF endlocal :main if "%1" == "create" ( call :create %2 %3 goto :EOF ) if "%1" == "remove" ( call :remove %2 goto :EOF ) if "%1" == "list" ( call :list %2 goto :EOF ) call :help goto :EOF :create if not "%1" == "" if not "%2" == "" ( echo @%~2 %%* > %aliasDir%\%~1.bat goto :EOF ) echo ERROR: Positional arguments ^<alias^> and ^<original^> cannot be empty. goto :EOF :remove if exist %aliasDir%\%1.bat ( del %aliasDir%\%1.bat ) else ( echo ERROR: Alias "%1" is not found. ) goto :EOF :list for %%f in (%aliasDir%\*.bat) do ( for /f %%c in (%%~f) do set content=%%c echo %%~nf -^> !content:~1! ) goto :EOF :help echo Usage: echo %programName% create ^<alias^> ^<original^> echo %programName% remove ^<alias^> echo %programName% list goto :EOF
これをalias.bat
の名前でパスの通った適当な場所に置けば、
> vscode . 'vscode' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 > alias create vscode Code > alias list vscode -> Code > vscode . (VSCodeが起動する)
といった感じで使えます。お粗末さまでした。
bat のお作法みたいなのがわかんないので雰囲気で書いてますけど、どんなもんなんですかねえ……