如何使用 Powershell 在双引号中使用撇号

How to get around using apostrophe in double quotes with Powershell

我正在使用 Powershell。我的问题是我的文件路径(在本地计算机上不存在)中有一个撇号。 Powershell 将其视为单引号,因此出现以下错误:字符串缺少终止符:'. 我认为我可以使用反引号转义单引号,但这给了我同样的错误。

我在执行第一行代码时没有出现错误,我什至不需要那部分的反引号。我什至可以看到变量的内容与我正在使用的文件路径匹配。只有当我执行调用表达式部分时,它才会给我错误。

我正在使用https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression?view=powershell-7,所以我认为代码的第二行不是问题。

我的代码如下:

$code = "\example\example\John_Doe`'s_Folder\example.ps1"
invoke-expression -command $code

我也试过用双引号和单引号将整个文件路径括起来,但我的程序也不喜欢那样。我无法删除撇号,因为我们有超过一百个系统指向 John_Doe's_Folder.

Invoke-Expression should generally be avoided; definitely .

在你的情况下,只需使用 &call operator to invoke your script via the path stored in variable $code (see 作为背景信息),在这种情况下,嵌入的 ' 根本不需要转义:

$code = "\example\example\John_Doe's_Folder\example.ps1"
& $code

至于你试过的

"\example\example\John_Doe`'s_Folder\example.ps1"转成下面逐字字符串内容:

\example\example\John_Doe's_Folder\example.ps1

也就是说,` 通过 PowerShell 对 "..." 字符串本身的解析被 删除,其中 ` 作为转义字符;由于转义序列 `' 没有特殊含义,因此 ` 只是 删除 .

对于 ` 到 "survive",您需要 转义 ` 字符。本身 ,你可以用 ``:

"\example\example\John_Doe``'s_Folder\example.ps1"