2019年2月16日土曜日

PowerShellで、ファイルの一覧を取得する方法

PowerShellでファイルやフォルダの全部の一覧を取得する時は、単純に以下のように書くだけです。

GET-CHILDITEM 

↑ただし、これだけだと本当にざっと一覧が出るだけですので、たとえば、ファイルだけの一覧が欲しい時はオブジェクトをパイプライン(|記号)でチェーンさせてWHERE-OBJECT(省略で?と記述可能です)でもって絞り込みます。



GET-CHILDITEM | ?{!$_.PSIsContainer}

↑$_.PSIsContainerプロパティは、フォルダ(ディレクトリ)の時にTrueを返すもので、これを!で否定するとファイルだけを抽出するという意味になります。

表示させる内容を選びたい時は、パイプライン(|記号)でさらにSELECT-OBJECTにチェーンさせ、表示したい項目(Property)を選択します。



GET-CHILDITEM | ?{!$_.PSIsContainer} | SELECT-OBJECT Name,LastWriteTime,{$_.Length/1024} 

↑名前(Name)、最終更新時間(LastWriteTime)、サイズ(Length)を選択して表示します。

ただし、Lengthはそのままだとバイトになるので、/1024してKBに直しています。

SELECT-OBJECTは、プロパティの列挙だけでなく、スクリプトブロックによって値を直接加工する事が出来るのもポイントです。



GET-CHILDITEM -RECURSE | ?{!$_.PSIsContainer} | SELECT-OBJECT Name,LastWriteTime,{$_.Length/1024} 

↑サブフォルダも含めて全ての階層を検索する時は、GET-CHILDITEMに-RECURSEオプションを付けます。

PowerShellは、Windowsの伝統に合わせているのか、大文字小文字を区別しない仕様になっているので楽です。