1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

諸般の事情からファイルの一覧を取得して分析をしたかったのだけれど、標題の件のやり方がなかなか解らなかったのでメモっておきます。

はじめに

メインはLinuxなどのUNIX系OSな人です。よってPowerShellは本当によくわかっていません。なので、本記事の読者は似たような人を想定しています!

本編

やりかた

dir-csv.ps1
$target = "c:\path\to\target\dir"
$outfile = "c:\path\to\result.csv"

Get-ChildItem -Recurse $target | Where-Object { ! $_.PSIsContainer } | Select-Object FullName, Length, CreationTimeUtc, LastWriteTimeUtc, LastAccessTimeUtc | Export-CSV -path $outfile -Encoding UTF8 -NoTypeInformation

(若干の)解説

まず前提として

従来のDOSやLinuxコマンドとは異なり、PowerShellの場合、大ざっぱにいうと、コマンドの実行結果は何らかのオブジェクトのインスタンスが返却されます。なので、パイプで多段化する際に、 grep のように絞り込んだり awk のように変形させるだけではなくて、情報を増やす事も可能だったりします。
そして、コマンドの表示結果のカスタマイズ(e.g. 表示項目を増やしたり形式を変えたり)というのは --help 相当の Get-Help を使っても出てきませんので、各コマンドがどんなインスタンスを返却するのかを考えつつ、絞り込んだり表示項目や書式をカスタマイズする必要があります。

Get-ChildItem

Get-Helpだと殆どオプションが出てきませんが、 Get-Help Get-ChildItem -Online だと、上記で利用した -Recurse 等も出てきます。今回のサンプルだと、再帰的に見たかったので -Recurse のみ入れました。

Where-Object

今回はディレクトリ不要でファイルだけ取りたかったので、フォルダでないものになるように絞り込みをしています。こちらもローカルで見れるヘルプは大した事が載っていないので、 -Online をつけてヘルプを見ましょう!

Select-Object

ここがDOSやLinuxのshellと特に異なっている部分です。コマンドはインスタンスを返しているため、何も指定しないと既定の出力(全部ではなくてメジャー項目を適当なフォーマットで出力する)となります。必要項目をちゃんと指定してあげると、指定した項目は漏れなく表示されます。

Export-CSV

こちらは直感的なのでまずまずわかりやすいと思いますが、 -NoTypeInformation をしないと1行目にゴミが入ります。これは入れましょう。また、エンコーディングを指定しないとASCII扱いとなり、日本語等々思い切り文字化けになるので、こちらも基本指定しましょう。

その他注意点

260文字を超えるPATHがあるとエラーになります。この場合はWindows10やWindows Server 2016以降であれば、 LongPathsEnabled を有効にすると制限を解除できるようです。それ以前の場合はどうにもなりませんので、サードパーティのツール等々を使用しましょう。

個人的な感想

LinuxのShellとはだいぶ異なるので、正直取っつき辛いなと思っていたのですが、実は結構高機能(今回は紹介していませんが、.Netのちょっとした処理もすぐに実行できる)なので、ちょっとしたことなら意外と出来たりします。パス問題のように、どうにもならないケースも多々あるのでそれが難しいところですが…。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?