PowerShell缺少终止符:"

64

我有以下的脚本代码

#[string]$password = $( Read-Host "Input password, please" )
param (
    [string]$ReleaseFile = $(throw "-ReleaseFile is required"),
    [string]$Destination = $(throw "-Destination is required")
)
 
function unzipRelease($src, $dst)
{
    $shell = new-object -com shell.application
    $zip = $shell.NameSpace($src)
    foreach($item in $zip.items())
    {
        $shell.Namespace($dst).copyhere($item)
    }
}

#  .\deployrelease.ps1 -ReleaseFile ".\deploy.zip" -Destination "."

unzipRelease –Src '$ReleaseFile' -Dst '$Destination'

我使用以下命令运行脚本:.\deployrelease.ps1 -ReleaseFile ".\deploy.zip" -Destination "."

但是我一直收到以下错误信息:

PS C:\Users\Administrator\Documents\Tools> .\deployrelease.ps1 -ReleaseFile ".\deploy.zip" -Destination
The string starting:
At C:\Users\Administrator\Documents\Tools\deployrelease.ps1:19 char:16
+ unzipRelease â? <<<< "Src '$ReleaseFile' -Dst '$Destination'
is missing the terminator: ".
At C:\Users\Administrator\Documents\Tools\deployrelease.ps1:19 char:55
+ unzipRelease â?"Src '$ReleaseFile' -Dst '$Destination' <<<<
    + CategoryInfo          : ParserError: (Src `'$ReleaseF...'$Destination`':String) [], ParseException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我找不到解决方法,因为我没有看到任何问题。

有什么帮助吗?


你正在使用什么编辑器? - stark
8个回答

152

仔细观察两个破折号的位置

unzipRelease –Src '$ReleaseFile' -Dst '$Destination'

第一个破折号不是普通的短横线,而是 en-dash (&ndash; 在 HTML 中表示)。将其替换为在 Dst 前面找到的破折号。


14
在我遇到的同样问题上,原因是PowerShell脚本没有保存为Windows-1252或UTF-8 WITH BOM编码。

4
我也遇到了同样的问题。我的脚本文件中有一些Unicode字符,该文件以UTF-8编码保存但没有BOM。添加BOM解决了这个问题。 - zett42

7
当路径以''和闭合引号紧随其后时,也会发生这种情况。 例如,以下行作为参数之一传递是不正确的:
"c:\users\abc\"
相反,按照下面所示传递该参数,使最后一个反斜杠转义而不是转义引号。

3

在你的脚本中,为什么要在变量周围使用单引号?这些不会被扩展。使用双引号进行变量扩展或只使用变量名称本身。

unzipRelease –Src '$ReleaseFile' -Dst '$Destination'

to

unzipRelease –Src "$ReleaseFile" -Dst "$Destination"

2

如果您从一个带有空格的路径中调用.bat文件并调用.ps1文件,则也会出现此错误。

解决方法是确保.ps1文件的路径中没有空格。


2
如果您正在使用RHEL,请尝试将双引号替换为单引号-这对我来说解决了错误。
祝好。

1
当您在多行字符串中使用@前缀/后缀时,如果实际上存在结束后缀"@,则可以发现错误。
我的脚本看起来像这样:
Add-Type @"
    public class SomeClass {
        ...
    }"@

我仍然得到了以下错误提示:字符串缺少终止符:"@"

这个错误提示有些误导人,实际上我只需要在新行的开头不加空格地输入"@"即可解决问题:

Add-Type @"
    public class SomeClass {
        ...
    }
"@

0

我的文件夹包含了 ' 符号。在我移除它之后,问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接