假设我有一个名为“test[1].txt”的文件。这两个命令都不会产生输出:
PS C:\Temp> dir test[1].txt
PS C:\Temp> get-acl test[1].txt
PS C:\Temp>
好消息是该dir
命令有一个-LiteralPath
开关,告诉它不要将任何字符解释为通配符:
PS C:\Temp> dir -LiteralPath test[1].txt
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/25/2010 9:57 AM 5 test[1].txt
坏消息是get-acl
没有这样的开关。这似乎是一个已知问题。
根据该报告中的观察,我能想到的唯一解决方法是以这种有点尴尬的方式使用 UNC 路径:
PS C:\Temp> get-acl \\mymachine\C$\temp\test[[]1[]].txt
Directory: Microsoft.PowerShell.Core\FileSystem::\\mymachine\C$\temp
Path Owner
---- -----
test[1].txt MYDOMAIN\myname
我在由dir -rec -name
. 因为我不知道通配符会出现在哪里,所以我必须编写代码来转义它们(并将路径转换为 UNC 格式)。这有点笨拙。有没有更简单的方法?顺便说一句,我正在使用 PowerShell v1.0。
意见:也许这是在 PowerShell 设计中进行权衡的不可避免的结果,但不幸的是,每个命令都需要一个忽略通配符的选项,而不是在 shell 本身中具有该功能,以便所有命令自动受益。