読者です 読者をやめる 読者になる 読者になる

雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

一覧取得をOut-Fileでテキストファイルにリダイレクトすると不要なスペースが入る

題名の通り、PowerShellでファイル一覧やドメインのユーザー一覧など特に「Select-Object」を使用した一覧表示を、
テキストファイルにリダイレクトしたときに、PowerShellのウィンドウ幅分半角スペースが入ってしまうのを防ぐ方法。

例えば、あるフォルダ直下のファイル名一覧を作成するとして、

PS > Get-ChildItem .\ | Select-Object Name | Out-File ..\ichiran.txt -Encoding default

で、「ichiran.txt」をメモ帳などで開いたときに、

===== ↓↓↓ ichiran.txt ↓↓↓ =====

Name

      • -

output1.txt
USB整理.txt
勉強会資料.pptx
計算機.xls


===== ↑↑↑ ichiran.txt ↑↑↑ =====

一見問題ないように見えるが、各ファイル名の後に半角スペースがPowerShellのウィンドウサイズ幅まで入ってしまっており、
このファイルを次工程で取り込むときなどに支障が出ることも。

各ファイル名直後に改行をしてほしいのだが、スマートな方法が見つからず、
出力前にもう二つほど加工を入れる。

PS > Get-ChildItem .\ | Select-Object Name | Out-String -Stream | ForEach-Object {$_.trim()} | Out-File ..\ichiran.txt -Encoding default

文字列化して、ForEach-Objectで全行トリムしている。
せっかくオブジェクト化できているのを文字列化し、行ごとに回すのは処理効率上少々かっこ悪いが、他によい方法が見つからなかった。

===== ↓↓↓ ichiran.txt ↓↓↓ =====

Name

      • -

output1.txt
USB整理.txt
勉強会資料.pptx
計算機.xls


===== ↑↑↑ ichiran.txt ↑↑↑ =====

うまく半角スペースが消える。