引用Powershell中的疯狂

引用Powershell中的疯狂,powershell,Powershell,我正在PowerShell中使用invoke expression创建存档,但由于exe路径中有空格,因此无法工作。以下是我的变量: Set-Variable -name DIRRELEASE -value (Join-Path $env:UserProfile "\Documents\Coding\_Projects\ChickenPing\trunk\Dist\current\") $srcPath = (Join-Path $DIRRELEASE ("myapp_1.90-sr

我正在PowerShell中使用
invoke expression
创建存档,但由于exe路径中有空格,因此无法工作。以下是我的变量:

Set-Variable -name DIRRELEASE       -value (Join-Path $env:UserProfile "\Documents\Coding\_Projects\ChickenPing\trunk\Dist\current\")
$srcPath = (Join-Path $DIRRELEASE ("myapp_1.90-src.zip"))
Set-Variable -name WinRarFilter     -value "-x*\.svn -x*\.svn\* -x*\nutrition.db3"
Set-Variable -name WinRarOpts       -value "-r -s -m5 -inul"
$WinRar = `"C:\Program Files\Winrar\winrar.exe`"

#Then using this to invoke:
Invoke-Expression ($WinRAR + " a " + $srcPath + " " + $WinRARFilter + " * " + $WinRAROpts)
运行脚本时,出现以下错误:

术语“a”不能识别为cmdlet、函数、, 脚本文件或可操作程序。检查名称的拼写,或 如果包含路径,请验证路径是否正确,然后重试 再一次第1行字符数:3
+a通过使用呼叫接线员
&
,您可以使这项工作更容易进行

& $WinRAR a $srcPath "-x*\.svn" "-x*\.svn\*" "-x*\nutrition.db3" *  -r -s -m5 -inul

通过使用呼叫接线员
&
,您可以更轻松地处理此问题

& $WinRAR a $srcPath "-x*\.svn" "-x*\.svn\*" "-x*\nutrition.db3" *  -r -s -m5 -inul

命令调用操作符无疑是一个不错的选择。如果您真的想使用Invoke表达式,可以尝试使用格式运算符(-f)来正确引用[未测试的代码如下]:“{0}”a“{1}”{2}*{3}'-f$WinRar,$srcPath,$WinRARFilter,$WinRAROptsI从来没有真正理解为什么人们在调用其他程序时总是尝试
iex
。或者一些更复杂的方式。。。见鬼,它是一个shell(不仅仅是名字)–它的主要用途是调用命令和程序。我只发现
iex
在文本文件中有我想要执行的东西时才有用。我通常发现使用可扩展的here字符串比使用-f更容易获得正确的引用。把你想要的任何类型的引号放在任何你想要的地方,你不必担心嵌套或转义,除非你需要包含一个带有属性的变量。然后,您需要使用子表达式+双引号here字符串,或者在here-string上使用-f。命令调用操作符绝对是一种方法。如果您真的想使用Invoke表达式,可以尝试使用格式运算符(-f)来正确引用[未测试的代码如下]:“{0}”a“{1}”{2}*{3}'-f$WinRar,$srcPath,$WinRARFilter,$WinRAROptsI从来没有真正理解为什么人们在调用其他程序时总是尝试
iex
。或者一些更复杂的方式。。。见鬼,它是一个shell(不仅仅是名字)–它的主要用途是调用命令和程序。我只发现
iex
在文本文件中有我想要执行的东西时才有用。我通常发现使用可扩展的here字符串比使用-f更容易获得正确的引用。把你想要的任何类型的引号放在任何你想要的地方,你不必担心嵌套或转义,除非你需要包含一个带有属性的变量。然后需要使用子表达式+双引号here字符串或-f作为here字符串。