PowerShellの作業が捗るかもな小技4つ

こんにちは。PowerShellが大好きなwakです。弊社の主要プロダクトはWindowsアプリケーションのためPowerShellで作業する事が多いんですが、そのときによく使っているちょっとしたときに便利なコマンドなどを紹介します。

f:id:nurenezumi:20150402172254j:plain

本文とは特に関係のないかわいい猫

その前に、PowerShellって?

簡単に言えば、コマンドプロンプト(cmd.exe)よりもずっと進化したコマンドライン環境です。Linuxにもターミナルやシェルスクリプトがありますが、その(ずっと高機能な)Windows版だと考えてください。

f:id:nurenezumi:20150403174844p:plain

未だにコマンドプロンプトでファイル操作を行っている人はいないでしょうか? Windows.batファイルでできることが貧弱すぎてLinuxシェルスクリプトを羨ましく思っている人は? 正規表現にマッチする名前を持つファイルを検索して先頭1行を表示するだけのことがしたくてVectorを探すような人は? Windowsにももっとまともな自動処理が欲しいとお嘆きの人は?

あなた方は無駄な努力をしています。まずはPowerShellを起動してください。スタートメニューに見つかるはずです。Windows 8であればエクスプローラーからも起動できます。

並列な階層に複数ディレクトリを一度に作成

お馴染みのmkdirコマンドにカンマ区切りで名前を渡します。これ、内部的にはただ1個の配列を渡しています。

mkdir "dirA", "dirB", "dirC"

引用符が煩わしいので、こうしてもいいです。カンマが嫌なら他の記号を使ってください。

mkdir ("dirA,dirB,dirC" -split ",")

あ、連番でいいんですか? 若干面倒なかわりに豊富な書式指定文字列が使えます。

mkdir (1..99 | % { "Dir{0:00}" -f $_}) # Dir01, Dir02, ..., Dir99ができる

ただの数字だけのディレクトリでいいならもっと簡単です。

mkdir (1..99) # 1,2,...,99という名前のディレクトリができる

ディレクトリを作ってそこに移動

mkdirコマンドの戻り値は作成したディレクトリそのもの*1です。ということは、これでいいわけです。

pushd (mkdir DIRNAME)

別に1階層ずつ順に作る必要はありません。Cドライブの直下に新規ディレクトリDirAを作って、その下に新規ディレクトリDirBを作って、その下に新規ディレクトリDirCを作って、DirCの中に移動したりもできます。

PS D:\Work> pushd (mkdir C:\DirA\DirB\DirC)
PS C:\DirA\DirB\DirC>

1つ前のディレクトリに戻る

上でちょっと使いましたが、21世紀のcdコマンドがpushdpopdコマンドです。この2つはセットで覚えましょう。カレントディレクトリの移動履歴をどんどんpushしていくからpushdで、その履歴を上からpopしていくからpopdです。

PS C:\> pushd temp
PS C:\temp> pushd x:\
PS x:\> pushd C:\Windows
PS C:\Windows> popd #1つ前に戻る
PS x:\> popd # さらに1つ前に戻る
PS C:\temp>

cdとは違い、カレントドライブもその場で変わることに注目してください*2

コマンドを複数プロセスで並列実行……したい

これは無理です。残念。

キー操作色々

1つ前、2つ前のコマンドを繰り返す

[↑]キー、[↓]キーでこれまで実行したコマンド実行履歴を辿ってゆけます。

また、[F7]で実行履歴の一覧表示ができます。一覧表示から選択して実行もできますし、表示される番号を覚えておけば、番号を叩いて直接実行することもできます([F9]キー)。 この履歴を削除したければALT+F7を押しましょう。

コマンドの実行履歴を検索する

dirまで入力したところで[F8]を何度か押すと、これまでの入力履歴の中から「dir」で始まるものだけが検索されて順に補完されます。

直前のコマンドを途中までコピーする

MS-DOS時代から引き継がれている由緒正しい操作方法です。

PS C:\> (dir C:\Windows).Count # C:\Windows直下にあるファイル・ディレクトリの数
104
PS C:\>

ここで[F2]を押した後で[s]を押すと、直前に実行したコマンドが「s」の直前までコピーされます。

PS C:\> (dir C:\Window

カーソル移動

CTRL+[←]、CTRL+[→]でカーソルを単語単位で移動できます。 [Home]で行頭、[End]で行末です。また、CTRL+[End]で行末まで削除になります。

まとめ

せっかくのWindowsですから無理にPowerShellを使う必要はありませんが、覚えておくと作業が圧倒的に楽になる場面はきっとあるはずです。 マウスで同じような作業を何度も繰り返しているとき、たくさんのファイルを移動したりリネームしたりする必要があってうんざりしているとき、ちょっとPowerShellのことを思い出してみてください。

関連リンク

qiita.com

*1:正確には.NETのDirectoryInfoオブジェクト

*2:cd /d x:\ でも同じことはできますが