中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

PowerShell从命令行参数中剥离双引号

最近我一直在使用PowerShell中的GnuWin32时遇到一些麻烦,只要涉及到双引号。 经过进一步的调查,看来PowerShell从命令行参数中剥离了双引号,即使正确转义也是如此。 PS C:\Documents and Settings\Nick> echo '"hello"' "hello" PS C:\Documents and Settings\Nick> echo.exe '"hello"' hello PS C:\Documents and Settings\Nick> echo.exe '\"hello\"' "hello" 请注意,当传递给PowerShell的echo cmdlet时,双引号是存在的,但是当作为parameter passing给echo.exe时 ,除非用反斜线转义(即使PowerShell的转义字符是反引号,而不是反斜线),否则双引号将被剥离。 这对我来说似乎是一个错误。 如果我将正确的转义string传递给PowerShell,那么PowerShell应该处理任何转义可能是必要的,但是它调用该命令。 这里发生了什么? 目前,解决方法是根据这些规则来逃避命令行参数(这些规则似乎被PowerShell用来调用.exe文件的CreateProcess API调用所使用): 要传递一个双引号,用反斜线转义: \" – > " 要传递一个或多个反斜杠,然后加双引号,用另一个反斜杠转义每个反斜杠,然后转义引号: \\\\\" – > \\" 如果后面没有双引号,则反斜杠不需要转义: \\ – > \\ 请注意,进一步转义双引号可能需要将Windows API转义string中的双引号转义为PowerShell。 下面是一些使用GnuWin32的echo.exe的例子: PS C:\Documents and Settings\Nick> echo.exe […]