我正在尝试验证文件是否存在,但问题是文件名在名称中有括号,即c:\ test [R] 10005404,注释失败,[S] SiteName.txt。
我尝试过使用字符串.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
答案 0 :(得分:22)
尝试使用-LiteralPath参数:
Test-Path -LiteralPath 'C:\[My Folder]'
方括号具有特殊含义。
它实际上是一个POSIX功能,所以你可以这样做:
dir [a-f]*
这将为您提供当前目录中以字母A到F开头的所有内容.Bash具有相同的功能。
答案 1 :(得分:5)
至少有三种方法可以让它发挥作用。
使用类似于你的方法的东西,你需要在使用双引号时添加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