机械人没有';从PowerShell启动时无法识别选项

机械人没有';从PowerShell启动时无法识别选项,powershell,robocopy,Powershell,Robocopy,我正在尝试使用PowerShell cmdletInvoke Expression启动RoboCopy 在下面的脚本中,当选项仅为“.”时,RoboCopy工作正常。但在添加选项“/MIR”后,我得到了这个“无效参数#3”错误 似乎RoboCopy在解析“/MIR”时遇到了问题,并且被选项中的正斜杠卡住了。我尝试过使用各种类型的转义字符,但都没有用 # Source & Destination paths # [string]$srcPath = 'C:\folderSrc' [

我正在尝试使用PowerShell cmdlet
Invoke Expression
启动RoboCopy

在下面的脚本中,当选项仅为“.”时,RoboCopy工作正常。但在添加选项“/MIR”后,我得到了这个“无效参数#3”错误

似乎RoboCopy在解析“/MIR”时遇到了问题,并且被选项中的正斜杠卡住了。我尝试过使用各种类型的转义字符,但都没有用

# Source & Destination paths
#
  [string]$srcPath = 'C:\folderSrc'
  [string]$desPath = 'C:\folderDes'

# Example 1
# ----------
# This works - note how $option1 contains only '*.*'
#
  [string]$option1 = '*.*'
  [string]$line = 'RoboCopy  $srcPath  $desPath  $option1'
  Invoke-Expression "$line"

# Example 2:
# ----------
# This doesn't work - after '/MIR' is added to the option, RoboCopy seems to choke on the forward slash in '/MIR'
#
  [string]$option2 = '*.* /MIR'
  [string]$line = 'RoboCopy  $srcPath  $desPath  $option2'
  Invoke-Expression "$line"

Powershell在使用单引号时不展开$variables

在此处使用双引号:

[string]$line = "RoboCopy  $srcPath  $desPath  $option1"
不使用Invoke表达式可能更有意义

 RoboCopy.exe  $srcPath  $desPath  *.* /MIR
应该工作

我发现(使用双invokeeexpression)可以工作:

但无法解释为什么这(使用单调用表达式)也有效:

  [string]$srcPath = 'C:\folderSrc'
  [string]$desPath = 'C:\folderDes'
  [string]$option = '*.*'
  [string]$line = 'RoboCopy  $srcPath  $desPath  $option'

  Invoke-Expression "$line"
请注意,这两种情况的唯一区别是$option变量:

 '*.*'  vs.  '*.* /MIR'

像这样的不一致性是完全令人泄气的…

在我的问题中,示例1有效,但示例2无效。唯一的区别是$option1='*.'和$option2='*.*.*./MIR'我不认为存在变量扩展问题,因为如果变量没有正确扩展,示例1将无法工作。首先,请不要添加注释来尝试修改它。其次,正如您在回答克里斯托弗·刘易斯(Christopher G.Lewis)的答案时所分享的那样,我知道这是一个口译员而不是直接的PowerShell,我认为这是您的口译员的问题,而不是PowerShell本身的问题。解释器似乎没有正确处理斜杠。停止分析的运算符可能在此处对您有用:-%I需要调用表达式,因为这实际上是PowerShell脚本的解释器,解释器在其中读取PowerShell脚本的文本文件并逐行执行脚本我不确定您要执行什么意思是。探索每个
[string]$行上的双引号谢谢,克里斯。我再玩一会儿
 '*.*'  vs.  '*.* /MIR'