2017-02-27 2 views
0

PowerShell cmdlet Invoke-Expression을 사용하여 RoboCopy를 시작하려고합니다.Robocopy가 PowerShell에서 시작할 때 옵션을 인식하지 못했습니다.

아래 스크립트에서 옵션이 '인 경우 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" 
+0

제 질문은 예제 1이 작동하지만 예제 2는 그렇지 않습니다. 단 하나의 차이점은 $ option1 = '\ *. \ *'와 $ option2 = '\ *. \ */MIR'입니다. – user3657462

+0

변수가 수행하면 예제 1이 작동하지 않기 때문에 변수 확장 문제가 있다고 생각하지 않습니다. 올바르게 확장되지 않음 – user3657462

+0

먼저 [질문 수정] (http://stackoverflow.com/posts/42496558/edit)을 시도하고 주석을 추가하여 수정하고 시도하십시오. 둘째, Christopher G. Lewis의 대답에 대한 답변에서 공유 한 것처럼 PowerShell이 ​​아닌 통역사라는 사실을 알고 있으면 PowerShell 자체가 아니라 통역사 문제라고 생각합니다. 통역사가 슬래시를 올바르게 처리하지 않는 것으로 보입니다. – TheMadTechnician

답변

0

Powershell은 작은 따옴표를 사용할 때 $ 변수를 확장하지 않습니다. 여기

사용 따옴표 :

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

그리고 그것이 내가이 (더블 InvokeExpression를 사용하여) 발견

+0

Invoke-Expression이 필요합니다. 실제로이 스크립트는 PowerShell 스크립트의 해석기이기 때문에 인터프리터는 PowerShell 스크립트의 텍스트 파일을 읽고 줄 단위로 스크립트를 실행합니다. – user3657462

+0

당신이 무슨 뜻인지 정확히 모르겠습니다. '[string] $ line' 명령에 대해 큰 따옴표를 찾으십시오. –

+0

감사합니다. Chris. 나는 그걸 좀 더 연주 할거야. – user3657462

0

작동합니다 InvokeExpression

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

를 사용하지하는 것이 더 적합 할 수 있습니다 근무한 :

[string]$srcPath = 'C:\folderSrc' 
    [string]$desPath = 'C:\folderDes' 
    [string]$option = '*.* /MIR' 
    [string]$line = 'Invoke-Expression "RoboCopy $srcPath $desPath $option"' 

    Invoke-Expression "$line" 

그러나 설명 할 수없는 이유를이 (단일 호출 표현을 사용)도 작동합니다

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

불일치와 같은 : 2 개 시나리오에서 유일한 차이점은 $ 옵션 변수입니다

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

    Invoke-Expression "$line" 

하는 것으로 이것은 완전히 사기입니다 ...