PowerShellでスペース区切りの文字列からsplit演算子でn番目の項目を取り出す。

powershell コンピュータ
powershell

linux系のcutコマンドと同じようなことをPowerShellでどうするのか考えてみました。

例:
まずファイルの一覧をテキストファイルに書き出す

Get-ChildItem | Select-Object -First 5 > filelist.txt

filelist.txtの中身



    ディレクトリ: C:\Users\karet


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2021/04/13     17:29                .atom
d-----        2021/03/19     15:36                .azuredatastudio
d-----        2023/09/01     11:05                .dbus-keyrings
d-----        2022/11/22     15:28                .dlv
d-----        2024/01/16     14:04                .dotnet

filelist.txtをsplit演算子で分割しファイル名(Name)項目のみを抽出してみる。

 Get-Content filelist.txt | ForEach-Object { (-split $_)[3] }
Name
----
.atom
.azuredatastudio
.dbus-keyrings
.dlv
.dotnet

Get-Contentでfilelist.txtを読み込みForEach-Objectで各行ごと処理を行います。
$_変数には1行分のレコードが文字列としてセットされているのでsplit演算子で項目ごとを分割します。
分割された結果は配列のように項目番号で取り出すことが出来るので、Nameの項目番号の3を指定することでファイル名だけが取り出せました。

splitの説明は以上ですが、ファイルの一覧からファイル名のみを抽出する場合PowerShellでは以下の方法が良いと思われます。

Get-ChildItem | Select-Object Name
Name
----
.atom
.azuredatastudio
.dbus-keyrings
.dlv
.dotnet

cutコマンドは文字列を対象しているので文字列を分割出来るPowerShellのsplit演算子を使ってみたのですが、PowerShellの場合Get-ChildItem(ls)はファイルオブジェクトを返すので、分割をしなくともファイル名のプロパティ(Name)にアクセスすれば事足ります。

例としてファイルの一覧を選んだことが良くなかったと反省しています。

コメント