📂

Windows で readlink -f のようなもの

2021/04/25に公開

相対パスから絶対パスを取得する

相対パスから絶対パスを得たいことはしばしばあります。 Linux であれば readlink -f foo でこの仕事を完了できます。 しかし MS-Windows にはそのようなコマンドがありません[1]。 ないなら作りましょう。 ここにあります。

これはなに

相対パスを絶対パスに変換して標準出力します。

書式

> GetFP [相対パス]

第一引数にい相対パスを指定します。 引数を省略した場合はカレントディレクトリ (.) を選択したものとして扱います。 第二引数以降は無視されます。

戻り値

戻り値 ステータス
0 パスは有効です
1 無効なパスです / ファイルは存在しません
-1 絶対パスを正しく出力できなかった恐れがあります

どうしてこんなものを作ったのか

Windows でも wget(1) のようにコマンドラインから HTML を取得したいと思っていた時期がありました。 どうやら HTMLGET というコマンドがあるようで、それを使えばコマンドラインから HTML を取得できそうでした。 しかし、このコマンドは保存先の絶対パスが必要で、取得の毎に絶対パスを入力するのは大変に煩わしいことでした。 これが所以です。 どうして wget そのものを作らなかったのか……

DOSKEY マクロ

DOSKEY MYWGET=FOR /F "USERBACKQ" %%A IN (`GetFP $2`) DO BITSADMIN /TRANSFER HTMLGET $1 %%A

とマクロを組んで

MYWGET httpから始まるURI 保存先ファイル名

とすると劣化版 wget として利用できます。 ただし、Content-Size が報告されている必要があるようです。

これを作って数週間で Windows Update がきて、Windows でも curl が使えるようになりました。 めでたしめでたし。

おわりに

おわりです。

脚注
  1. ああ、もしかしたら PowerShell なら何か手段があるかも知れません ↩︎

Discussion