Powershellでファイルとフォルダの区別をする方法

普通にPSIsContainerプロパティを使えばよい

#カレントディレクトリのフォルダだけを表示
> Get-ChildItem | Where-Object {$_.PSisContainer}

#同じくファイルだけを表示
> Get-ChildItem | Where-Object {$_.PSisContainer}

ちょっとした解説

PSIsContainerプロパティはオブジェクトがコンテナーの場合にTrue、そうでない場合はFalseになる。 Powershellにおけるコンテナーとは"オブジェクトを格納できるもの全般"のこと。 フォルダ、レジストリキーなどが該当する*1

追記:2018/03/14

上記Powershell v3 以降の場合はそもそもGet-ChildItemFileパラメータやDirectoryパラメータで絞り込んで表示できることができるようになっている。

*1:正式なドキュメントなどは見当たらず…試してみた範囲ではこの2つだった

『ヘルシープログラマ』

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

エンジニア視点で健康を改善するにはどうしたら良いか、が書いてある本。

基本はテスト⇒改善⇒再テストを継続してやっていくことで品質を上げていこうという考え方が基本になっている。

そのうえでプログラマにありがちな健康問題への対策や、どうやって継続するかについてのアドバイスなどが書かれている。

一つ一つの対策に目新しいものはないけれど、プログラマのみならず健康を手に入れるためのシステムが欲しい人にはちょうど良い本だと思う。

※あくまで健康になるための本で、ダイエット本ではない。

Kaoriya版のVimにプラグインを導入する

Kaoriya版のVimプラグインを導入するためには、vim74-kaoriya-win64フォルダの下のpluginsフォルダにプラグインのファイルを一式配置する*1

また、プラグインのテスト等をするために、vim74-kaoriya-win64以下にvimfilesフォルダを作成しておくと、vim74-kaoriya-win64/pluginsより優先して読み込んでくれる。

*1:どうやらpluginsフォルダ直下のフォルダを起動時にruntimepathに追加してくれているようで、サブフォルダを作っても読み込んでくれる

VimでPowershellのコマンドを使う。

vimrcの設定に以下の記載を追加することで":!"したときのコマンドをPowershellに変更できる。

"Vimで使用するコマンドをPowershellに変更する
set shell=powershell.exe

残念なことに、コマンドの補完は効かない。

Powershellで印刷を自動化したい

Powershellで印刷したいとき、例えば以下のようにStart-Processコマンドを利用する手がある

#カレントディレクトリのすべてのファイルに対して印刷を試みる
>ls | %{Start-Process -FilePath $_ -Verb print -Wait}

いろいろ欠点はある。

  • 細かな設定はできない*1
  • -Verb printできるかはファイル次第で、調べるには以下のようにする
>$startExe = new-object System.Diagnostics.ProcessStartInfo -args PowerShell.exe

>$startExe.verbs
open
runas

ただ、ちょっとした事務作業を効率化するのにはすごく便利。

参考

Start-Process

*1:もしやりたいときは、愚直にPowershellからソフトのコマンドを呼ぶしかない。ExcelとかWordとか