PowerShell缺少终止符:”

7nbnzgx9  于 2023-03-30  发布在  Shell
关注(0)|答案(8)|浏览(349)

我有以下脚本代码

#[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 -版本文件“.\deploy.zip”-目标“.”
但我一直听到这个:

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

我找不到修复,因为我没有看到任何问题。
有人帮忙吗?

fd3cxomn

fd3cxomn1#

仔细看两个破折号

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

第一个不是普通的破折号,而是一个短破折号(HTML中的&ndash;)。将其替换为Dst之前的破折号。

zz2j4svz

zz2j4svz2#

在我的特定情况下,同样的问题,这是由于没有保存的Powershell脚本与编码的Windows-1252或UFT-8与BOM。

kninwzqo

kninwzqo3#

当路径以''结尾,后跟右引号时,也可能发生这种情况。例如,以下行作为参数之一传递,这是不正确的:
“c:\users\abc\”
而是按如下所示传递参数,以便转义最后一个反斜杠,而不是转义引号。
“c:\users\abc\”

iqxoj9l9

iqxoj9l94#

在你的脚本中,为什么要用单引号括住变量呢?这些变量不会被展开。用双引号来表示变量展开或者仅仅是变量名本身。

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

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

vyswwuz25#

如果从.bat文件调用.ps1文件并且文件路径中有空格,也会发生此错误。
修复方法是确保.ps1文件的路径中没有空格。

aiazj4mn

aiazj4mn6#

你可以在多行字符串中使用@前缀/后缀,而实际上结尾后缀是"@时发现错误。
我的脚本看起来是这样的:

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

但我还是得到了* 字符串缺少终止符:“@*.
消息是误导性的,因为我需要做的就是将"@放入新行,没有任何前导空格

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

z6psavjg7#

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

dced5bon

dced5bon8#

如果你使用的是RHEL,试着用'替换' -这为我修复了错误
干杯

相关问题