【2023年】これからブログを始める人へおすすめの書籍

Kissy

【PowerShell】パスの操作方法まとめ

作成: 更新:

Powershellでファイル内に文字列があるか確認する方法

この記事では、PowerShellでのパスの操作方法をまとめています。

パスにはファイルやフォルダを区切る\があるため、パスの操作は単なる文字列の結合ではなく、少し面倒な操作です。

プログラミング言語によっては、文字列で操作するため\が二重でついてしまい誤ったパスにアクセスしようとするということがわりとあります。PowerShellには、パスを操作するコマンドレットが用意されているため簡単に間違いなく操作できます。

パスの存在確認

ファイルの存在を確認する

ファイルの存在確認には、Test-Pathを使います。存在すればTrue、存在しなければFalseが返ります。

Test-Path -Path 'C:\Windows\System32\user32.dll'

フォルダの存在を確認する

フォルダの存在確認も、ファイルと同様にTest-Pathを使います。存在すればTrue、存在しなければFalseが返ります。

Test-Path -Path 'C:\Windows'

パスの結合

パスを結合する場合は、Join-Pathを使います。

以下は、C:\tempaccess.logを結合しています。この時、C:\tempであってもC:\temp\であっても正しくC:\temp\access.logのパスが生成されます。

Join-Path -Path 'C:\temp' -ChildPath 'access.log'

複数のパスを一度に結合する場合は、Join-Pathをパイプでつなぎます。

Join-Path -Path 'C:\temp' -ChildPath '20201024' | Join-Path -ChildPath 'access.log'

パスの分解

パスを分解する場合は、Split-Pathを使います。

パスの親要素を取得する

フォルダパスだけ取得したいケースでは、パスの最後の要素を除いて取得したいです。この場合、-Parentオプションを使用します。

Split-Path -Path 'C:\temp\access.log' -Parent

パスの子要素を取得する

ファイル名だけ取得したいケースなどでは、パスの最後の要素を取得したいです。この場合、-Leafオプションを使用します。

Split-Path -Path 'C:\temp\access.log' -Leaf

ファイル名(拡張子なし)を取得する

ファイル名の拡張子の前の部分だけ取得したい場合があります。この場合は、System.IO.FileInfoBaseNameプロパティを使います。(System.IO.FileInfoGet-Item等で取得したオブジェクトになります。)

例えば、user32.dllのファイル名(拡張子なし)を取得する場合は、以下のようになります。

(Get-Item  'C:\Windows\System32\user32.dll').BaseName

拡張子を取得する

ファイル名の拡張子を取得する場合はSystem.IO.FileInfoExtensionプロパティを使います。

例えば、user32.dllの拡張子を取得する場合は、以下のようになります。

(Get-Item  'C:\Windows\System32\user32.dll').Extension

カレントディレクトリの操作

カレントディレクトリを取得する

カレントディレクトリを取得する場合は、Get-Locationを使います。

Get-Location

カレントディレクトリを移動する

カレントディレクトリを移動する場合は、Set-Locationを使います。

Set-Location -Path 'C:\Windows'

Set-Locationはデフォルトでは何も出力しないので、移動したディレクトリを確認したい場合は、-PathThruオプションをつけます。

Set-Location -Path 'C:\Windows' -PassThru

親ディレクトリに移動する

DOSコマンドや他言語と同様に、PowerShellでもカレントディレクトリは.、親ディレクトリは..で表します。これを使って親ディレクトリに移動するには、以下のようにします。

Set-Location -Path ..

ホームディレクトリに移動する

PowerSellを起動すると通常カレントディレクトリはユーザーフォルダ(C:\Users<UserName>)になります。カレントディレクトリを移動していると、一度にホームディレクトリに移動したい場合があります。この場合は、~を使って以下のようにします。

Set-Location -Path ~

pushとpop

カレントディレクトリを移動していると、1つ前のディレクトリに戻りたい場合があります。その場合、1つ前のディレクトリパスを覚えておく必要がありますが、わりと面倒です。特に複数のディレクトリ階層を移動していると2つ前、3つ前なんて覚えてられません。

DOSコマンドの場合は、カレントディレクトリの移動の際、直前のパスを覚えていてくれる便利なコマンドpushpopがありました。PowerShellにも同様のコマンドがあります。Push-LocationPop-Locationです。

これを使うと以下のようになります。

# カレントディレクトリが‘C:¥Users\<UserName>`だとする

Push-Location -Path 'C:\Windows'
# カレントディレクトリは`C:\Windows`。

Pop-Location
# カレントディレクトリは‘C:¥Users\<UserName>`。

特別なフォルダ

「ドキュメント」フォルダなど、Windowsには意味を持った特別なフォルダがあります。これらのパスを取得したい場合、以下のようにします。

#
# 特別なフォルダ
#

# 管理ツールフォルダ(ローミング)
# (C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools)
[Environment]::GetFolderPath('AdminTools')

# アプリデータフォルダ(ローミング)
# (C:\Users\<UserName>\AppData\Roaming)
[Environment]::GetFolderPath('ApplicationData')

# CD書き込みフォルダ
# (C:\Users\<UserName>\AppData\Local\Microsoft\Windows\Burn\Burn)
[Environment]::GetFolderPath('CDBurning')

# ユーザー共通 管理ツールフォルダ
# (C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools)
[Environment]::GetFolderPath('CommonAdminTools')

# ユーザー共通 アプリデータフォルダ
# (C:\ProgramData)
[Environment]::GetFolderPath('CommonApplicationData')

# ユーザー共通 デスクトップフォルダ
# (C:\Users\Public\Desktop)
[Environment]::GetFolderPath('CommonDesktopDirectory')

# ユーザー共通 ドキュメントフォルダ
# (C:\Users\Public\Documents)
[Environment]::GetFolderPath('CommonDocuments')

# ユーザー共通 ミュージックフォルダ
# (C:\Users\Public\Documents)
[Environment]::GetFolderPath('CommonMusic')

# 下位互換のためWindows Vistaまで。現在は使用できない。
# [Environment]::GetFolderPath('CommonOemLinks')

# ユーザー共通 ピクチャフォルダ
# (C:\Users\Public\Pictures)
[Environment]::GetFolderPath('CommonPictures')

# アプリ間共有フォルダ
# (C:\Program Files\Common Files)
[Environment]::GetFolderPath('CommonProgramFiles')

# アプリ間共有フォルダ(x86)
# (C:\Program Files (x86)\Common Files)
[Environment]::GetFolderPath('CommonProgramFilesX86')

# スタートメニューフォルダ(プログラム)
# (C:\ProgramData\Microsoft\Windows\Start Menu\Programs)
[Environment]::GetFolderPath('CommonPrograms')

# スタートメニューフォルダ
# (C:\ProgramData\Microsoft\Windows\Start Menu)
[Environment]::GetFolderPath('CommonStartMenu')

# スタートアップフォルダ
# (C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup)
[Environment]::GetFolderPath('CommonStartup')

# テンプレートフォルダ
# (C:\ProgramData\Microsoft\Windows\Templates)
[Environment]::GetFolderPath('CommonTemplates')

# ユーザー共通 ビデオフォルダ
# (C:\Users\Public\Videos)
[Environment]::GetFolderPath('CommonVideos')

# Cookiesフォルダ
# (C:\Users\<UserName>\AppData\Local\Microsoft\Windows\INetCookies)
[Environment]::GetFolderPath('Cookies')

# デスクトップフォルダ(仮想)
# (C:\Users\<UserName>\Desktop)
[Environment]::GetFolderPath('Desktop')

# デスクトップフォルダ(物理)
# (C:\Users\<UserName>\Desktop)
[Environment]::GetFolderPath('DesktopDirectory')

# お気に入りフォルダ
# (C:\Users\<UserName>\Favorites)
[Environment]::GetFolderPath('Favorites')

# フォントフォルダ
# (C:\WINDOWS\Fonts)
[Environment]::GetFolderPath('Fonts')

# 履歴フォルダ
# (C:\Users\<UserName>\AppData\Local\Microsoft\Windows\History)
[Environment]::GetFolderPath('History')

# インターネットキャッシュフォルダ
# (C:\Users\<UserName>\AppData\Local\Microsoft\Windows\INetCache)
[Environment]::GetFolderPath('InternetCache')

# ローカル アプリ間共有フォルダ
# C:\Users\<UserName>\AppData\Local
[Environment]::GetFolderPath('LocalApplicationData')

# ローカライズリソースフォルダ
# 
[Environment]::GetFolderPath('LocalizedResources')

# マイコンピュータ
# 
[Environment]::GetFolderPath('MyComputer')

# マイドキュメント
# (C:\Users\<UserName>\Documents)
[Environment]::GetFolderPath('MyDocuments')

# マイミュージック
# C:\Users\<UserName>\Music
[Environment]::GetFolderPath('MyMusic')

# マイピクチャ
# C:\Users\<UserName>\Pictures
[Environment]::GetFolderPath('MyPictures')

# マイビデオ
# C:\Users\<UserName>\Videos
[Environment]::GetFolderPath('MyVideos')

# ネットワークショートカット
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Network Shortcuts
[Environment]::GetFolderPath('NetworkShortcuts')

# パーソナル(マイドキュメント)
# C:\Users\<UserName>\Documents
[Environment]::GetFolderPath('Personal')

# プリンターショートカット
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
[Environment]::GetFolderPath('PrinterShortcuts')

# プログラムファイル
# C:\Program Files
[Environment]::GetFolderPath('ProgramFiles')

# プログラムファイル(x86)
# C:\Program Files (x86)
[Environment]::GetFolderPath('ProgramFilesX86')

# ユーザー スタートメニュー(プログラム)
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
[Environment]::GetFolderPath('Programs')

# 最近使ったファイル
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Recent
[Environment]::GetFolderPath('Recent')

# システムリソース
# C:\WINDOWS\resources
[Environment]::GetFolderPath('Resources')

# 送るメニュー
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\SendTo
[Environment]::GetFolderPath('SendTo')

# スタートメニュー
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu
[Environment]::GetFolderPath('StartMenu')

# スタートアップ
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
[Environment]::GetFolderPath('Startup')

# system32フォルダ
# C:\WINDOWS\system32
[Environment]::GetFolderPath('System')

# syswow64フォルダ
# C:\WINDOWS\SysWOW64
[Environment]::GetFolderPath('SystemX86')

# テンプレートフォルダ
# C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Templates
[Environment]::GetFolderPath('Templates')

# ユーザープロファイル
# C:\Users\<UserName>
[Environment]::GetFolderPath('UserProfile')

# Windowsフォルダ
# C:\WINDOWS
[Environment]::GetFolderPath('Windows')

参考サイト

まとめ

パスの操作方法をまとめました。パスを文字列で操作すると間違いのもとです。Join-PathSplit-Pathを使うことで間違いなく操作できます。

パスの操作はとてもよく使うので、よく理解しておきたいですね。

最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。

関連記事

SPONSORED LINK
SPONSORED LINK