1. ホーム
  2. powershell

[解決済み] Join-Pathを使って、2つ以上の文字列をファイルパスに結合するにはどうすればよいですか?

2022-03-07 19:56:17

質問

2つの文字列を組み合わせてファイルパスを作成したい場合、以下のようにします。 Join-Path このように

$path = Join-Path C: "Program Files"
Write-Host $path

と表示されます。 "C:\Program Files" . しかし、2つ以上の文字列に対してこれを行いたい場合。

$path = Join-Path C: "Program Files" "Microsoft Office"
Write-Host $path

PowerShellはエラーを投げます。

Join-Path : 引数 'Microsoft Office' を受け入れる位置パラメーターが見つかりません。
At D:Lescape.ps1:1 char:18
+ $path = join-path <<< C: "Program Files" "Microsoft Office".C: "Program Files" "Microsoft Office"
+ CategoryInfo : InvalidArgument: (:) [結合パス]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell
.コマンド.JoinPathCommand

文字列配列を使ってみました。

[string[]] $pieces = "C:", "Program Files", "Microsoft Office"
$path = Join-Path $pieces
Write-Host $path

しかし、PowerShell は子パスを入力するよう求めてきます(私が -childpath 引数)、例えば "somepath"、そして3つのファイルパスが作成されます。

C:\somepath
Program Files\somepath
Microsoft Office\somepath

というのも正しくありません。

解決方法は?

.NETの パス クラスがあります。

[IO.Path]::Combine('C:\', 'Foo', 'Bar')