我想帮助理解Powershell v5.1中文件的引用规则。我正在使用有时会有空格的路径,如果它们是目录,有时会尾随反斜杠。
我有这个:
PS> echo "C:\Temp\"
C:\Temp\
PS> echo "C:\Temp 1\"
C:\Temp 1\
PS> .\myecho "C:\Temp\"
C:\Temp\
PS> .\myecho "C:\Temp 1\"
C:\Temp 1"
PS> .\myecho 'C:\Temp 1\'
C:\Temp 1"
其中echo
是内置命令,也就是写输出,而myecho
是一个C程序,只打印出argv[]
的值。特别是,最后两个是出乎意料的。
似乎PS对内置插件和外部程序应用了不同的规则,并且取决于路径是否有空格。
有人可以解释或指出我的规则吗?
[编辑] 为了解决Jeroen Mostert的评论:
PS> .\myecho --% "C:\Temp 1\"
C:\Temp 1"
PS> .\myecho --% 'c:\temp 1\'
'c:\temp
1\'
(在第二种情况下,C程序收到了argv [1] = 'c:\temp
和argv [2] = 1\'
)
[编辑2] Jeroen的进一步评论:打印出C程序从GetCommandLine()
收到的内容
PS> .\myecho "C:\Temp\"
"C:\temp\myecho.exe" C:\Temp\
PS> .\myecho "C:\Temp 1\"
"C:\temp\myecho.exe" "C:\Temp 1\"
PS> .\myecho 'C:\Temp 1\'
"C:\temp\myecho.exe" "C:\Temp 1\"
答案 0 :(得分:0)
请记住,迭代和输出argv[]
与输出实际(文字)命令行不同,正如您所指出的那样。为此,您可以使用GetCommandLine
API。
无论如何,您可能会发现以下文章有用:
Windows IT Pro - Running Executables in PowerShell
相关下载中有showargs.exe
使用GetCommandLine
API输出实际/文字命令行,无需任何解释或解析。