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)にアクセスすれば事足ります。
例としてファイルの一覧を選んだことが良くなかったと反省しています。
コメント