我从 Java 应用程序(通过 Windows 命令提示符)中调用 PowerShell 来读取各种文件属性。
例如,
powershell (Get-Item 'C:\Users\erlpm\Desktop\Temp\s p a c e s.txt').creationTime
我用单引号将文件路径括起来,因为它可能包含空格。它工作得很好,直到我遇到一个包含方括号的文件路径,这似乎被解释为通配符。我设法通过添加-literalPath参数来解决它:
powershell (Get-Item -literalpath 'C:\Users\erlpm\Desktop\Temp\brackets[].txt').creationTime
到目前为止,一切都很好……但是文件路径也可能包含单引号、美元符号、和号等,并且所有这些字符似乎在 PowerShell 中都有特定的功能,而-literalPath参数似乎不起作用。
我尝试用双引号将路径括起来或用`字符转义,但这也没有解决我的问题:-(
关于如何将可能包含空格、单引号、方括号、& 符号、美元符号等的文件路径传递给 PowerShell 的任何建议?
这里有人已经向我展示了如何在 PowerShell 中使其工作,但不知何故,答案已被删除(?)。
无论如何,我确实创建了一个名为$ & ' [].txt
. 这在PowerShell 中有效(需要转义&
):
Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
Directory: C:\Users\erlpm\Desktop\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012-08-23 14:22 0 $ & ' [].txt
但是当我通过 Windows 命令提示符执行相同的 PowerShell 命令时,...
powershell Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
...我收到此错误:
不允许使用与号。& 运算符保留供将来使用;使用“&”将 & 号作为字符串传递。
在行:1 字符:55 \
- Get-Item -LiteralPath C:\Users\erlpm\Desktop\Temp`$ & <<<< ' [].txt \
- CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException \
- FullyQualifiedErrorId : & 不允许
使用-command
参数并将 PowerShell 命令置于其间{}
会给出完全相同的错误消息...
powershell -command {Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"}