Powershell文件引用

时间:2017-10-03 10:42:55

标签: powershell

我想帮助理解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\"

1 个答案:

答案 0 :(得分:0)

请记住,迭代和输出argv[]与输出实际(文字)命令行不同,正如您所指出的那样。为此,您可以使用GetCommandLine API。

无论如何,您可能会发现以下文章有用:

Windows IT Pro - Running Executables in PowerShell

相关下载中有showargs.exe使用GetCommandLine API输出实际/文字命令行,无需任何解释或解析。