windows 在powershell中转义双引号-命令

qqrboqgw  于 2022-12-24  发布在  Windows
关注(0)|答案(2)|浏览(312)

由于某些限制,我必须从Windows命令提示符执行Power Shell命令

powershell -Command "(gc C:\my_configuration.conf) -replace 'INSERT_URL', \`"https://mytestserver/WW48.2'22/testing.bin\`" | Out-File C:\my_configuration.conf"

但是,我不断地得到ParserError,如下所示

The string is missing the terminator: '.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我应该如何正确地用双引号将URL字符串括起来?谢谢您的回答。

dgiusagp

dgiusagp1#

删除"之前的```,您的命令应该可以工作;也就是说,**从cmd.exe/外部PowerShell调用powershell.exe时,请使用\",而不是\"(或``")**以转义"字符:

powershell -Command "(gc C:\my_configuration.conf) -replace 'INSERT_URL', \"https://mytestserver/WW48.2'22/testing.bin\" | Out-File C:\my_configuration.conf"

虽然您确实需要对嵌入在整个"..."命令字符串中的"字符进行转义,但将它们**转义为\"**就足够了-无需 * 还 * 使用,即PowerShell常用的[escape character](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Special_Characters)。 PowerShell *CLI*([`powershell.exe`](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe))需要`\`-转义`"`,以便更好地与大多数CLI保持一致,即使 * 在PowerShell会话内 * 您需要使用``"`或(仅在`"..."`内)`""`。[1] 你只需要同时使用`\`和--在``"的格式中,注意```是第一个--如果你嵌入的"..."本身包含"`字符;一个人为的例子:

:: OK: Prints '3" of snow.'
powershell.exe -c " Write-Output \"3`\" of snow.\" "

正如iRon所指出的,替代解决方案是使用嵌入式'...'引用(单引用)。
由于您的URL本身包含一个'字符,因此必须将该字符转义为''

:: Note the use of '...' around https://... and the inner ' escaped as ''
powershell -Command "(gc C:\my_configuration.conf) -replace 'INSERT_URL', 'https://mytestserver/WW48.2''22/testing.bin' | Out-File C:\my_configuration.conf"

[1]在PowerShell (Core) 7+(其CLI为pwsh.exe)中,您也可以在整个"..." on the command line too, which is actually the more robust choice when calling from命令行. When calling powershell.exe from命令行, the robust choice is“^"”(sic) - see [this answer](https://stackoverflow.com/a/49060341/45375). However, the PowerShell CLI recognizesin _both_ editions, andalso works forchars. _not_ inside overall“...""中使用""

ecfsfe2w

ecfsfe2w2#

尝试使用此语法,始终有效

"%windir%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "& { <# PUT ANYTHING HERE #> }"

你不用担心会逃脱什么。
验证码:

"%windir%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "& { (gc C:\my_configuration.conf) -replace 'INSERT_URL', "https://mytestserver/WW48.2%2722/testing.bin" | Out-File 'C:\my_configuration.conf' }"

EDIT1:检查here中的URL特殊字符。单引号(')可以通过硬编码字符串中的替换(%27)来处理。(我在上面的第二个代码示例中更改了它)

相关问题