2013-04-30 3 views
0

Windows XP SP3에서 작동하는 아래 (예제) 배치 파일을 얻으려고 애 쓰고 있습니다. IF NOT EXIST 부분은 작동하는 것 같다,하지만 난 XCOPY/I 플래그를 사용에도 불구하고 "Does <path\filename.ext> specify a file name or directory name on the target" 메시지를 수신 유지 :Windows XP 일괄 IF & XCOPY

@IF NOT EXIST "\\SERVER\PATH\TO\FILE DIR" (
     MKDIR "\\SERVER\PATH\TO\FILE DIR" 
     XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" /I 
    ) ELSE (
     XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" /I 
    ) 

나의 이해는 존재하지 않는 경우 /I 스위치, XCOPY 디렉토리 구조를 생성해야한다는 것입니다 - 적어도 파일 이름을 지정하지 않으면 않습니다. 불행하게도이 프로젝트의 요구 사항에 따라 파일 이름을 지정해야하며 원본 파일을 자동화 된 프로세스로 매일 조작되는 템플릿 파일로 유지할 수 없습니다.

그래서 나는 XCOPY의 문제 및 경로의 존재를 확인하여 존재하지 않는 디렉토리 경로를 해결하기 위해 노력하고는 MKDIR 명령으로 만든 다음 파일을 복사,이 아니라면 -하지만 XCOPY 목적지가 파일인지 디렉토리인지 묻는 메시지가 나오는데 이는 의미가 없지만 뭔가 빠졌을 수도 있습니다.

이것은 Windows XP SP3에 대한 것입니다.

아이디어가 있으십니까?

답변

0

당신은 쉽게 이런 식으로 뭔가를 찾을 수 있습니다 :

md "\\SERVER\PATH\TO\FILE DIR" 2>NUL 
copy "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" 

초기 'MD'디렉토리를 만들려고합니다. 이미 존재하면 STDERR에 오류 메시지를 출력합니다. 2>NUL은 Windows의 기본 제공 "널 장치"로 리디렉션됩니다. 즉, 오류 메시지를 그냥 버립니다. 적절한 사용 권한이 있다고 가정하면이 디렉토리가 존재하는지 확인할 수 있습니다.

복사 명령은 파일을 복사하기 만합니다. 단일 파일을 복사하는 데 xcopy를 사용할 필요가 없습니다. 파일이나 디렉토리인지 여부를 묻는 메시지와 같이 지나치게 잔인하고 혼란 스럽습니다.

+0

UNC 경로를 사용하여 마지막으로 시도한 시간에 오류가 발생하여 허용하지 않기 때문에 "COPY"를 사용하지 않았습니다. 즉, 나는 단지 이것을 시도하고 그것은 작동합니다. 내 이해는'XCOPY'는 NTFS 볼륨간에 파일을 복사하는 것이 더 낫다는 것입니다. 나는 IT 조직을 비난한다. 기쁜 소식을 전하면 기쁩니다. – DigitalNoise

+0

일반적으로'xcopy'는 전체 디렉토리 트리를 복사하는 데 가장 잘 사용되는 반면,'copy'는 파일을 복사하는 좋은 일을합니다. :-) 질문을 대답으로 표시하는 것을 잊지 마십시오! – Mark

0

복사하기 전에 대상 파일이 존재하지 않으므로 xcopy는 "FILE FINAL.XLSM"이라는 새 디렉터리를 만들어야하는지 확실하지 않습니다. 그런데 대상 디렉터리를 이미 만들었으므로 xcopy에/I가 필요하지 않습니다. 다음은 원하는대로 할 수있는 몇 가지 방법입니다.

  1. echo F | XCOPY ....
  2. 사본 .... (xcopy는에 "F"대답을 먹이)
0
echo f|XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" 

파일을 복사해야합니다 (단일 파일에 대한 XCOPY를 사용할 필요가 없습니다) 그리고 디렉토리를 만듭니다. "this is a file"을 지정하는 옵션을 사용할 수 없었던 이유는 모르겠지만 RTFM - /i 스위치는 두 개 이상의 파일을 복사하는 경우에만 적용되며 대상 이름의 마지막 문자로 \을 지정하면 XCOPY 어떤 경우 에든 대상이 디렉토리 이름이므로 /i sems 중복됩니다.

그러나 copy 경로를 따르는 경우주의하십시오. 일반 copy이 .MPG와 같은 일부 파일 형식을 제대로 복사하지 못할 수도 있으므로 일반적으로 copy /b을 사용하는 것이 좋습니다. 첫 번째^Z에서 중지 될 수 있습니다. 그러나 copy /b은 안전합니다.