2012-10-23 2 views
2

내 네트워크 위치 (my tv show downloads 폴더)에서 다른 네트워크 위치 (my pvr)로 파일을 복사하려고하는 vbscript (cscript/vbs)).WScript.Shell.run이 robocopy를 실행해도 대상 매개 변수가 표시되지 않습니다.

xcopy를 사용하려고했지만 문맥없이 "구문 분석 오류"가 발생했습니다. 따옴표 붙은 공백이있는 파일을 보장하는 등의 몇 가지 작업을 시도해 보았습니다.

나는 scripting.filesystemobject의 copyfile 메소드를 사용해 보았지만 "파일 이름이나 번호가 잘못되었습니다"라는 오류로 실패하여 많은 것을 막을 수있었습니다.

현재 일반적으로 위의 두 가지보다 robocopy를 사용하여 복사본을 처리하려고합니다. 하지만 WScript.Shell의 Run 메서드를 사용하여 cscript 내에서 실행하면 대상, 파일 이름 및 매개 변수가 모두 "떨어져"됩니다.

여기 복사 부분이 있습니다. 단지 \\server\path\more path might have spaces\etc\etc의 형식 -

 if dirmatch > "" then 
      fileFrom = quote(myloc) ' & fil.name) 'fil.name will not need to be quoted 
      fileTo = quote(dirmatch) ' puts double-quotes around things if they have spaces in the name 
      ' copyCommand = "%comspec% /k xcopy " & fileFrom & " " & fileTo & " /C /D /Y" ' returns "parse error" 
      copyCommand = "%comspec% /k robocopy " & fileFrom & " " & fileTo & " " & fil.name & " /R:3 /W:10"' /MOV" 
      logmsg copyCommand 
      oShellApp.run copyCommand 
     else 
      logmsg "no matching directory found for: " & fil.name 
     end if 

는 fileFrom 및 fileTo 내가 이전에 파일 이름 구문 분석을 사용하여 계산 한 디렉토리입니다. fil.name은 파일이며 공백을 포함하지 않습니다 - 점 분리. 폴더 이름의 공백은 내가 사용하는 다른 응용 프로그램에서 일치하는 이유로 필요합니다.

그래서 주어진 파일 복사 명령은 다음과 같이한다 : 새로운 명령 창에서

00:19: %comspec% /k robocopy \\qnap\qdownload\transmission\completed \\pvr\e\tv\MythBusters Mythbusters.S11E03.Hail.Hijinx.HDTV.x264-FQM.mp4 /R:3 /W:10

하지만 ROBOCOPY (예 : cmd.exe /k)를 다음과 같이 던졌습니다 : 나는 그것을 시작

------------------------------------------------------------------------------- 
    ROBOCOPY  ::  Robust File Copy for Windows 
------------------------------------------------------------------------------- 
Started : Tue Oct 23 21:04:58 2012 
Source : \\qnap\qdownload\transmission\completed\ 
Dest - 
Files : *.* 
Options : *.* /COPY:DAT /R:1000000 /W:30 
------------------------------------------------------------------------------ 
ERROR : No Destination Directory Specified. 

맞지만 첫 번째 매개 변수를 지나칠 수는 없습니다. copy를 사용하여 동일한 명령을 수행하면 같은 문제가 발생했을 수 있습니다.

모든 robocopy 매개 변수가 새 cmd 인스턴스로 전달되도록하려면 어떻게해야합니까?

p.s. 내 전체 스크립트는 여기에 : http://pastebin.com/xgpGJYmU : 그것을 최적화하는 자유롭게!

답변

1

오케이, 그래서 나이가 들었을 때 나는 마침내 대상의 시작 부분에있는 문자가 0보다 작은 ASCII 코드를 가지고 있다는 것을 알아 냈습니다. filesystemobject와 asp 모두 그렇게 재미 있고 당신은 이런 멍청한 시나리오를 가질 수 있습니다. ASP 유니 코드 구현 : 너 개자식!

는 거기 처음부터 내 얼굴을 응시했다 :

00:19: %comspec% /k robocopy \\qnap\qdownload\transmission\completed 
\\pvr\e\tv\MythBusters Mythbusters.S11E03.Hail.Hijinx.HDTV.x264-FQM.mp4 /R:3 /W:10 

줄 바꿈 \ 이전의 PVR \ 전자 등등은 명령 프롬프트에서 포장 문제 것처럼 나는 그것을 처리, 그러나 문자열의 "캐릭터 별 특성"탐구는 문제를 드러내지 않았습니다. 완전히 짜증나 해킹입니다

Function unicodeToAscii(sText) 
    Dim x, aAscii, ascval, l 
    l = len(sText) 
    If l = 0 Then Exit Function 
    redim aAscii(l) 
    For x = 1 To l 
    ascval = AscW(Mid(sText, x, 1)) 
    If (ascval < 0) Then 
     ascval = 65536 + ascval ' http://support.microsoft.com/kb/272138 
    End If 
    aAscii(x) = chr(ascval) 
    Next 
    unicodeToAscii = join(aAscii,"") 
End Function 

: 나는 다시 아스키 내 넓은 바이트를 변환 할 수있는 정규식을 절감 할 수 없습니다 결국

, 그래서 편지 별 편지 쓰기 접근을해야했다.

robocopy 또는 wsh가 아닌 unicode 파일 시스템에서 문제가 발생합니다. 해결되었습니다.

p.s. 다음은 전체 스크립트의 업데이트되고 최적화 된 pastebin입니다 : http://pastebin.com/s1XtzCGC