PowerShellのSystem.IO名前空間で相対パスが参照できない
目次
System.IO名前空間で相対パスが参照できない
以下、PowerShellでSystem.IO
名前空間のFile.Exists
メソッドを使用して「C:\sample\sample.txt
」の存在を確認する例です。
PS > Set-Location C:\sample
PS > Get-Location
Path
----
C:\sample
PS > Get-ChildItem -Name
sample.txt
PS > [IO.File]::Exists("C:\sample\sample.txt")
True
PS > [IO.File]::Exists("sample.txt")
False
絶対パスで指定ではTrue
となりますが、相対パス指定ではFalse
となります。
System.IO名前空間で相対パスが参照できない原因
相対パスが参照できない原因は、System.IO
名前空間でのカレントディレクトリーが、PowerShellのカレントディレクトリーではないためです。
System.IO
名前空間でのカレントディレクトリーは、Directory.GetCurrentDirectory
メソッドで参照できます。
PS > [IO.Directory]::GetCurrentDirectory()
C:\Users\username
デフォルトではC:\Users\{ユーザー名}
となっています。
System.IO名前空間の相対パスを変更する方法
System.IO
名前空間でのカレントディレクトリーは、Directory.SetCurrentDirectory
メソッドで変更できます。
PS > [IO.Directory]::SetCurrentDirectory("C:\sample")
PS > [IO.Directory]::GetCurrentDirectory()
C:\sample
PS > [IO.File]::Exists("sample.txt")
True
Directory.SetCurrentDirectory
メソッドでカレントディレクトリーを変更すると、相対パス指定も正しく認識できます。