アラサーからのプログラマー生活

アラサーの新米PGが必死に頑張る成長記録です。あとは旅行とか。

PowerShellでファイル名だけ、拡張子だけ、拡張子を除いたフルパスなど取得するコード色々

こんにちは、堀井です。

はてなよりQiitaに書くべき記事ではないでしょうか。

前回引き続きPowerShellをもう少しだけやりました。覚書程度です。

今回ですが、例えばzip圧縮を行うバッチを作りたいときや、ファイル移動を行いたいときに使えると思います。

前提としてファイルパスを記載した変数が用意されているものとします。

[string]$filePathName = "C:\Users\USERNAME\Desktop\hoge.txt"



拡張子を除くフルパス(C:\Users\USERNAME\Desktop\hoge)

$filePathName.Substring(0, $filePathName.LastIndexOf('.'))
最後に . が出てくる箇所を見つけて、それより前の文字列を切り取ります。


Join-Path([System.IO.FileInfo]$filePathName).DirectoryName ([System.IO.FileInfo]$filePathName).BaseName
親フォルダのパスとファイル名をくっつけています。


$filePathName -replace '\.[^.\\/]+$'
フルパスから . 以下を空白で置換しています。


拡張子込みのファイル名(hoge.txt)

(Get-ChildItem -Path $filePathName).Name
文字列ではなくパスとして解釈した上で、そのファイル名を取得します。


[System.IO.Path]::GetFileName("$filePathName")
ストレートに、ファイル名を取得するメソッドを利用しています。


Split-Path $filePathName -Leaf
Split-Pathという超絶便利なコマンドレットにより切り出しています。


効果は以下の通り。

Split-Path $path [command]
  -Qualifier : ドライブ名
  -noQualifier : ドライブ名以外
  -Parent : 親フォルダ
  -Leaf : 末端の要素


ファイル名のみ(hoge)

[System.IO.Path]::GetFileNameWithoutExtension("$filePathName")
ストレートに、拡張子を除いたファイル名を取得するメソッドを利用しています。


(Split-Path -Path $filePathName -Leaf) -replace '(.+)(\.[^.]+$)','$1'
拡張子込みのファイル名を取得し、それに対し正規表現を用いて . の手前のみ取得しています。


拡張子のみ(.txt)

[System.IO.Path]::GetExtension("$filePathName")
ストレートに、拡張子のみを取得するメソッドを利用しています。


(Split-Path -Path $filePathName -Leaf) -replace '(.+)(\.[^.]+$)','$2'
拡張子込みのファイル名を取得し、それに対し正規表現を用いて . 以降を取得しています。



バッチって普段全然触らないから中々面白いですね、普段使いとしてもうちょっと楽しめそうです。

それではまた次回。