我有以下脚本代码
#[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
我找不到修复,因为我没有看到任何问题。
有人帮忙吗?
8条答案
按热度按时间fd3cxomn1#
仔细看两个破折号
第一个不是普通的破折号,而是一个短破折号(HTML中的
–
)。将其替换为Dst
之前的破折号。zz2j4svz2#
在我的特定情况下,同样的问题,这是由于没有保存的Powershell脚本与编码的Windows-1252或UFT-8与BOM。
kninwzqo3#
当路径以''结尾,后跟右引号时,也可能发生这种情况。例如,以下行作为参数之一传递,这是不正确的:
“c:\users\abc\”
而是按如下所示传递参数,以便转义最后一个反斜杠,而不是转义引号。
“c:\users\abc\”
iqxoj9l94#
在你的脚本中,为什么要用单引号括住变量呢?这些变量不会被展开。用双引号来表示变量展开或者仅仅是变量名本身。
到
vyswwuz25#
如果从
.bat
文件调用.ps1
文件并且文件路径中有空格,也会发生此错误。修复方法是确保
.ps1
文件的路径中没有空格。aiazj4mn6#
你可以在多行字符串中使用
@
前缀/后缀,而实际上结尾后缀是"@
时发现错误。我的脚本看起来是这样的:
但我还是得到了* 字符串缺少终止符:“@*.
消息是误导性的,因为我需要做的就是将
"@
放入新行,没有任何前导空格:z6psavjg7#
我的文件夹包含'符号。在我删除它后,问题解决了。
dced5bon8#
如果你使用的是RHEL,试着用'替换' -这为我修复了错误
干杯