从PowerShell启动时,Robocopy无法识别选项
我试图使用PowerShell cmdlet Invoke-Expression
启动RoboCopy。从PowerShell启动时,Robocopy无法识别选项
在下面的脚本中,当选项仅仅是',RoboCopy工作正常。',但只要选项'/ MIR'被添加,我得到这个“无效的参数#3”错误。
似乎RoboCopy在解析'/ MIR'时遇到了问题,并且在选项中的正斜杠上出现ch咽。我试过使用各种逃避角色无济于事!
# 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不展开$变量。
使用双引号的位置:
[string]$line = "RoboCopy $srcPath $desPath $option1"
它可能使更有意义,不使用InvokeExpression
RoboCopy.exe $srcPath $desPath *.* /MIR
应工作
我需要Invoke-Expression,因为这实际上是PowerShell脚本的解释器,其中解释器读取PowerShell脚本的文本文件并逐行执行脚本 – user3657462
我不完全确定您的意思。探索每个'[string] $ line'命令的双引号 –
谢谢,克里斯。我会再玩一些 – user3657462
我发现这(使用双InvokeExpression)曾工作:
[string]$srcPath = 'C:\folderSrc'
[string]$desPath = 'C:\folderDes'
[string]$option = '*.* /MIR'
[string]$line = 'Invoke-Expression "RoboCopy $srcPath $desPath $option"'
Invoke-Expression "$line"
但不能解释为什么这(使用一个调用-表达)也可以工作:
[string]$srcPath = 'C:\folderSrc'
[string]$desPath = 'C:\folderDes'
[string]$option = '*.*'
[string]$line = 'RoboCopy $srcPath $desPath $option'
Invoke-Expression "$line"
注意的是,在2种情况下,唯一的区别是$选项变量:
'*.*' vs. '*.* /MIR'
像不一致这是完全士气低落...
在我的问题,示例1的作品,但示例2没有。和唯一的区别是$ option1 ='\ *。\ *'和$ option2 ='\ *。\ */MIR' – user3657462
我不认为有一个可变的扩展问题,因为如果变量没有没有得到正确的扩展 – user3657462
首先,请[编辑你的问题](http://*.com/posts/42496558/edit),不要添加评论来尝试和修改它。其次,由于知道这是一个解释器,而不是直接的PowerShell,正如您在回答Christopher G. Lewis的答案时所分享的那样,我会认为这是您的解释器而不是PowerShell本身的问题。看起来解释器没有正确处理斜线。 – TheMadTechnician