2017-02-27 108 views
0

我试图使用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" 
+0

在我的问题,示例1的作品,但示例2没有。和唯一的区别是$ option1 ='\ *。\ *'和$ option2 ='\ *。\ */MIR' – user3657462

+0

我不认为有一个可变的扩展问题,因为如果变量没有没有得到正确的扩展 – user3657462

+0

首先,请[编辑你的问题](http://stackoverflow.com/posts/42496558/edit),不要添加评论来尝试和修改它。其次,由于知道这是一个解释器,而不是直接的PowerShell,正如您在回答Christopher G. Lewis的答案时所分享的那样,我会认为这是您的解释器而不是PowerShell本身的问题。看起来解释器没有正确处理斜线。 – TheMadTechnician

回答

0

当使用单引号时,Powershell不展开$变量。

使用双引号的位置:

[string]$line = "RoboCopy $srcPath $desPath $option1" 

它可能使更有意义,不使用InvokeExpression

RoboCopy.exe $srcPath $desPath *.* /MIR 

应工作

+0

我需要Invoke-Expression,因为这实际上是PowerShell脚本的解释器,其中解释器读取PowerShell脚本的文本文件并逐行执行脚本 – user3657462

+0

我不完全确定您的意思。探索每个'[string] $ line'命令的双引号 –

+0

谢谢,克里斯。我会再玩一些 – user3657462

0

我发现这(使用双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' 

像不一致这是完全士气低落...