10

ファイルの存在を検証しようとしていますが、問題は、ファイル名の名前に角かっこが含まれていることです。つまり、c:\ test [R] 10005404、Failed with Comments、[S]SiteName.txtです。

string .replaceメソッドを使用しようとしましたが、成功しませんでした。

$a = c:\test\[R] 10005404, Failed with Comments, [S] SiteName.txt
$Result = (Test-Path $a)
# Returns $False even though the file exists.

試してみました

$a = $a.Replace("[", "`[")
$a = $a.Replace("]", "`]")

$Result = (Test-Path $a)
# Also returns $False even though the file exists.

アイデアをいただければ幸いです。ありがとう、ChrisM

4

2 に答える 2

27

-LiteralPath パラメーターを使用してみてください。

Test-Path -LiteralPath 'C:\[My Folder]'

角括弧には特別な意味があります。

これは実際にはPOSIX機能であるため、次のことができます。

dir [a-f]*

これにより、現在のディレクトリにある A から F までの文字で始まるすべてのものが表示されます。Bash にも同じ機能があります。

于 2012-04-13T18:17:21.497 に答える
5

それを機能させるには、少なくとも 3 つの方法があります。

メソッドに送信される前に単一のバックティックがエスケープ文字として評価されるため、アプローチに似たものを使用して、二重引用符を使用するときに2つのバックティックを追加する必要がありますReplace

$a = "c:\test\[R] 10005404, Failed with Comments, [S] SiteName.txt"
$a = $a.Replace("[", "``[")
$a = $a.Replace("]", "``]")
$Result = Test-Path $a

メソッドで一重引用符を使用Replaceすると、バッククォートも削除されなくなります。

$a = "c:\test\[R] 10005404, Failed with Comments, [S] SiteName.txt"
$a = $a.Replace('[', '`[')
$a = $a.Replace(']', '`]')
$Result = Test-Path $a

最後に、 LiteralPathワイルドカードを使用しないパラメーターを使用できます (角かっこは、PowerShell の一致で使用され、一致できる一連の文字を定義します)。

$a = "c:\test\[R] 10005404, Failed with Comments, [S] SiteName.txt"
$Result = Test-Path -LiteralPath $a
于 2012-04-13T18:20:23.633 に答える