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