エクスプローラのアドレスバー活用法

エクスプローラとかPowerShellとかの使い方の記事です。

PowerShellを使っていると、「エクスプローラの今のフォルダでPowerShellを使いたい」と思う事がよくあります。
Windows 8であれば、ショートカット Alt+F R で開くことができますが、Windows 7では使えませんし、今後も残るUIなのか少し心配だったりもします。

私がよくやってたのが、

* Windowsキー+Rで「ファイル名を指定して実行」から powershell と入力しPowerShellを起動
* アドレスバーの文字列をコピー
* cdを打ってPowerShellコンソールにパスを貼り付け

です。まあ習慣化しているとはいえ、手順が多く面倒です。もう少し良い方法があるといいですね。

#エクスプローラの現在のフォルダから PowerShell を起動
実は(?)、エクスプローラのアドレスバーにpowershellと入力する事で、このフォルダをカレントとしPowerShellコンソールを開くことができます。

![address_powershell.png](https://qiita-image-store.s3.amazonaws.com/0/70103/d3262fa0-be48-c48c-775c-74552e5c5f95.png)

```bat:アドレス
powershell
```

エクスプローラでアドレスバーにフォーカスする Alt+Dのショートカットも覚えておくと良いでしょう。


#PowerShellのカレントフォルダからエクスプローラを開く方法
逆パターンです。これも昔はパスをコピペする面倒な事をやっていましたが、もっと簡単な方法があります。

```ps1:PowerShell
explorer
```

PowerShellコンソールでexplorerと打てば、カレントフォルダでエクスプローラが立ち上がります。
それならばと思う人も多いでしょうが、起動オプションにパス文字列を指定してそのフォルダから開くこともできます。
環境変数と併用して

```ps1:powershell
explorer $Env:ProgramFiles
```
等とするのもちょっとしたTipsになるでしょうか。

キータイプ的に、もう少し楽な方法もあります。

```ps1:PowerShell
start .
```
startはStart-Processのエイリアスです。「.」はカレントフォルダを意味しますから、シェル実行のようにカレントフォルダのエクスプローラを起動する事ができます。

#アドレスバー活用法
アドレスバーの詳細な動作はよく解らない部分もありますが、「ファイル名を指定して実行」に近い動きをします。
したがって、標準でパスの通った実行ファイルであればどこからでも起動することができます。

##メモ帳で新規ファイル作成
「エディタの支援とか要らないのでちょっと数行のテキストファイルを作成したい」というケースがあります。
右クリック、新規作成～等とやっても良いですが、

```bat:アドレス
notepad test.ps1
```
等とやれば、カレントフォルダにtest.ps1を作成して即編集作業に入れます。
こういった感じで、実行ファイルの起動オプションもそれなりに通ります。

##cmd.exeで新しいフォルダを作成
細かい話ですが、エクスプローラ上で新しいフォルダを作成する手順を億劫に感じる場合があります。
その中でこのような方法もあるよ、という話なのですが。

```bat:アドレス
cmd /c mkdir newFolder
```

こんなコマンドで、newFolderというフォルダを作成する事もできます。
cmd.exeのcオプションは、引数で渡されたコマンドを実行して終了します。それを使ってmkdirコマンドを渡し、フォルダ作成する手です。
mkdirは複数フォルダの作成やサブフォルダの作成もできるので、覚えておくといつか役に立つ時が来るかもしれません。

```bat:アドレス
cmd /c mkdir fol1 fol2 fol3
```
```bat:アドレス
cmd /c mkdir fol1\fol2\fol3
```

cmd.exeにはkというオプションもあり、これはコマンド実行した後、コンソールが終了せず残ります。
実行結果を確認したい場合はcの代わりにkを指定するのが良いでしょう。

PowerShellを使わずcmd.exeを使っているのは、cmd.exeの方が起動が速いからですね。

##PowerShellで新しいフォルダを作成
まあ、PowerShellを使ってもできます。

```bat:アドレス
powershell mkdir fol1
```
(PowerShellにコマンドを渡す際は「-Command」の指定が必須だったような気がしていたのですが、そういう訳でもないようです。昔から？)
cmd.exeのkオプションのようにコンソールを終了したくない場合は「-NoExit」を指定します。

```bat:アドレス
powershell -NoExit mkdir fol1
```

凝った操作を書ける点にPowerShellの強みがありますが、しかし「|」等の文字をアドレスバーからPowerShellに渡すことはできないようです。つまりパイプライン操作が書けません。

複雑なコマンドは大人しくコンソールを起動するのが良さそうです。

##cmd.exeコマンドの結果だけ確認する
個人的に、コマンドプロンプトを開いてやる事の筆頭がipconfigです。ipconfigの為だけにコマンドプロンプトを使うという人も少なくないと言っても過言ではないのでは。

よくやるのは、Windowsキー+Rでcmdと打ち、起動したコマンドプロンプトでipconfigと打つやつです。
まあこれで良いのですが、たかがipconfigに2ステップの手順を掛けるのが何だか煩わしい。コマンドプロンプトが出てくるまでのキー入力待ちがなんかいやだ。
あと確認が終わったら、簡単に消えて欲しいと思いませんか？思うとします。そういう場合。

```bat:アドレス
cmd /c ipconfig&pause
```
このようにすると、ipconfigの実行後、キー入力待ちになり何かキーを打った時点で終了します。
cmd.exeは&でコマンドをつなぐと順次実行します。今回はipconfig実行後にpauseを実行し、キー入力待ちに移行します。
ウィンドウを片付けやすいので、本当に１コマンドの結果だけ確認したい場合はこういうのもアリと思います。

コマンドの内容から分かると思いますが、この辺はアドレスバー固有の動作ではなく「ファイル名を指定して実行」でも同様に動作します。

##管理者権限でPowerShellを起動
これをアドレスバーから簡単にできると良いのですが、中々良い方法が無いですね。

```bat:アドレス
powershell start powershell -Verb runas
```
これがオーソドックスな方法なのですが、長ったらしい上、カレントフォルダが引き継がれません。

```bat:アドレス
powershell start powershell '-NoExit','cd',$pwd -Verb runas
```
ですのでこうすれば、管理者権限かつカレントディレクトリに移動した状態で起動できます。どうも強引ですが。

##管理者権限でPowerShellを起動するバッチファイル
予め用意した環境に限定されてしまいますが、カレントディレクトリ&管理者権限でPowerShellを起動できるバッチファイルを作成しておくと、時に役立つかもしれません。
バッチファイルをパスの通ったフォルダに保存しておけばそのコマンドをいつでも利用できます。
Windowsのフォルダに保存してしまいましょう。私はよくWindowsフォルダに頻用するショートカット等を入れておきます。

```bat:psa.bat
powershell start powershell '-NoExit','cd',$pwd -Verb 
```
名前はpsa.batとしています。PowerShellでファイル作成をやってしまいましょう。

Windowsフォルダにファイルを作成するには管理者権限が必要ですので、
あらかじめ管理者権限のPowerShellを起動しておき、以下のコマンドでファイルを作成します。

```ps1:PowerShell(管理者)
"powershell start powershell '-NoExit','cd',`$pwd -Verb runas"|sc ($env:windir+'\psa.bat')
```

(「sc」はSet-Content、ファイル書き込みのコマンドです)
このようなファイルを作っておけば、エクスプローラのアドレスバーでpsaを実行すると、そのフォルダで管理者権限のPowerShellを起動できるようになります。

##cmd.exeを起動するバッチファイルの作成
cmd.exeのc,kオプションをもっと気楽に使いたいと思ったので、それぞれ c.bat, k.bat というバッチファイルにしてしまいます。

```bat:c.bat
cmd /c %*
```
```bat:k.bat
cmd /k %*
```
こんなのを作ります。(%*は、バッチファイルに渡されたパラメータをすべて展開します。)

```ps1:PowerShell(管理者)
'cmd /c %*'|sc ($env:windir+'\c.bat')
```
```ps1:PowerShell(管理者)
'cmd /k %*'|sc ($env:windir+'\k.bat')
```

これでバッチファイルを作成しておき、アドレスバーでcまたはkに続きcmd.exeのコマンドを入力する事で実行することができるようになります。

```bat:アドレス
c dir>files.txt
```
```bat:アドレス
k mkdir folder
```

といった具合ですね。