UnixユーザのためのWindowsコマンドライン超入門(その1)


きっかけはこのツイート

もうすぐBash on Windowsも使えるようになるからこういう悩みは減ると予測しています。でもWin10が使えない場合とか、他にもいろいろなケースが今後もありうると思うので、軽く「それ、Windowsでもできるよ」を共有しておこうかなと思います。

PowerShellはかなり強力でなんでもできるんですが、入力文字数が多すぎてコマンドをぱっと見て理解しにくくなっちゃってるのが悲しい(※個人の主観です)ので、ここでは主にCMDでやる方法を書きます。CMDも意外とやれること多いんですよ。

ファイルを日付順/逆順に表示

まずは引用元ツイートのls -ltrから。

C> dir /o-d

結構簡単です。
日付順に見たいときは-を抜けばOK。

C> dir /od

一番基本のdirコマンドは確かに地味でlsには見劣りしますが、そこまで馬鹿にしたものでもないんです。--colorに相当するのがないのが悲しいところですが。

ファイル一覧をlsっぽく表示

普通にdirを実行するとls -lと似た表示になります。

これをlsに似た表示にしたければdir /dとします。

いちいち/dオプションをつけなくても常にこの表示にしたければ環境変数DIRCMDを設定しておきます。

C> set DIRCMD=/d

あるディレクトリ以下にあるファイルを探したい(find相当)

Unixだとこんな感じでやりますよね。

$ find /home/abc -name hoge.txt -print

alias登録してる人も多いと思います。同じことをWindowsでやるには、やっぱりdirを使います。

C> dir /s \home\abc\hoge.txt

これで\home\abcの中のどこかにあるhoge.txtを探してくれます。/sオプションは後ろに置いても構いません。

C> dir \home\abc\hoge.txt /s

どっちも同じです。パス名を指定せずにファイル名だけを指定した場合はカレントディレクトリ以下を検索します。ファイル名にはワイルドカードを使えますが、ディレクトリ名には使えません。

C> dir \home\*.txt /s

これで\home以下の拡張子txtのファイルを全て表示します。

スクリプト処理用にファイル名だけを表示したい

ls -1に相当する機能です。これは/bオプションです。

dir/b \home\*.txt

余談ですがdir/の間は空白を明けなくても動きます。なので上のサンプルはtypoではないです。
この結果をfor(たぶんまた今度書きます)に食わせればxargsっぽい処理ができます。

カレントディレクトリからExplorerを起動する

最後はコマンドラインと言っていいのか微妙ですが便利なのでよく使う機能を紹介します。カレントディレクトリをエクスプローラで開きたい場合はこうします。

C> start.

.の代わりにディレクトリを指定すれば、エクスプローラがそのディレクトリを開きます。
startに続く文字が\(つまり絶対パス)か...の場合はスペースいりません。あってももちろん構いませんが、ストロークを1回減らせます。

dir /helpしてみてね

いかがでしょうか。しょぼいと思われがちなdirですが、使いようではいろいろできるんですよ。他にもオプションがあるので、気が向いた方はdir /helpしてみてください。