2017-12-27 67 views
0

문제점에 대한 해결책을 찾았지만 이상하고 정확히 어디로 잘못 될지 알 수 없습니다.내가 그것을 보지 않으면 배치 파일이 제대로 작동하지 않습니다.

나는 배치 파일을 매우 단순하게 보입니다. 두 개의 파일이있는 디렉토리에서 하나의 파일을 삭제하고 다른 파일을 복사 한 다음 방금 삭제 한 파일의 이름이 변경된 것으로 이름을 바꿉니다. 이름 바꾸기를 제외하고 모든 것이 제대로 작동하는 것 같습니다. 스크립트가 두 번 실행되는 것으로 거의 보이지만 실제로 이에 대한 증거는 찾을 수 없습니다. 아래 참조 :

수동으로 실행하면 정상적으로 작동하는 것 같습니다. 그러나 예약 된 작업에서 호출 할 때 두 번 실행되는 것처럼 보입니다. 즉, filename.csv가 삭제되고 _ *. csv 파일이 올바른 위치에 복사되지만 두 번째 파일은 삭제 된 것처럼 보입니다 이름을 바꾸는 것이 아닙니다.

내가 말했듯이, 나는 실제로 무슨 일이 진행되고 있는지에 대해 분명하지 않습니다. 출력 파일에 결과 로깅을 시도했지만 내부에는 도움이되지 않습니다.

내가 누락 된 항목을 누구든지 볼 수 있습니까?

미리 감사드립니다.

+0

'echo % filepath %% oldFile %'을 삽입하면 \\ server-name \ 디렉토리에 \ "filename.csv"라는 공백을 표시합니다. Magoo의 답변은'set'에 대한 정확한 인용 구문을 보여줍니다. – zett42

+0

zett42, lit 및 Magoo에게 ​​견적 마크 위치 및 더 나은 관행에 도움을 주셔서 감사합니다. 나는 이것이 근본적인 문제를 완전히 해결하지 못하더라도 결국 큰 도움이된다고 생각합니다. :) – Night1505

답변

0

마지막으로 해결책을 발견했습니다. 새로운 환경이 이전 된 구형 서버에서 실행되는 작업의 복사본이있었습니다. 새 서버에있는 서버와 정확히 동일한 시간에 실행 중이었기 때문에 작업을 실행하도록 설정 한 시간 전후에 서버를 실행하려고 시도한 방식으로 완벽하게 실행됩니다. 이전 버전의 작업을 비활성화하면 문제가 해결되었습니다.

내 명령에 대한 의견 및 제안을 주신 분께 감사드립니다.

1

검사

archive가있는 것 같습니다하는 것으로
IF EXIST %filepath%%curFile% COPY /y %filepath%%curFile% %filepath%%Archive 

%를 선도하는 -이 디렉토리 "아카이브"될 운명 또는 당신이 우리를 표시하지 않는 뭔가를 archive 세트이며 따라서는 ...%filepath%%Archive%해야한다

(누락/유실 %)의 결과는 파일이 archive 또는 해당 디렉토리가 이미 존재하는 경우 archive이라는 파일에 복사된다는 것입니다.

개인적으로, 나는 따옴표가 문자열을 구분

SET "filepath=\\server-name\directory with a space" 

"%의 VAR1을 사용하여 소스/대상 이름을 할당 (그래서 우고 후행 공백이 변수에 할당되지 않음)하고 구성 할 수 사용하십시오 % \ % var2 % "로 설정하면 double-"이 나타나고 디렉토리가 분명합니다 (그러나 이것은 스타일의 문제입니다).

+0

하위 폴더입니다. 예를 들어 \\ server-name \ 디렉토리에 공백이있는 \ Archive가 있습니다. 눈에 띄는 '%'기호가 눈에 띄지 만 잘 보입니다. 무슨 일이 일어날 것입니다 (존재하는 경우) 오래된 파일을 삭제, 아카이브 하위 폴더에 현재 파일을 복사하지만, 대신, 그것의 이름을 바꿉니다 현재 폴더에서 삭제하는 것 같다. 그건 내가 혼란스러워하는 부분이다. – Night1505

+0

글쎄, 그것은 내 상황을 시뮬레이션을 사용하여 나를 위해 작동하는 것 같습니다. 'oldfile'이'rename' 후에'filepath' 디렉토리에 존재하지 않는 것이 확실합니까? 'if exist ... rename ... '줄 앞과 뒤에'dir filename * .csv' 줄이 하나의 단서를 제공합니까? 나는'filename _ * .csv' 파일을 여러 개 사용하여 시도했는데, 적절한 "중복 파일 이름 또는 발견되지 않음"메시지를 표시했지만 여전히 파일 이름이 .csv입니다. 오류 메시지를 잘못 해석 한 것이 아니라고 확신합니까? – Magoo

+0

예, 작업을 그대로두면 파일 이름이 .csv로 끝납니다. 예 : "Base Folder"폴더에 전날부터'filename.csv'가 있다고합시다. 그래서 oldFile은'\\ Server \ Base Folder \ filename.csv'입니다. 새로운 파일'filename_2017.12.28.11.15.csv'가 오늘 생성됩니다. 둘 다 같은 폴더에 있습니다. 스크립트를 자체적으로 실행 시키면 \\ Server \ Base Folder \ Archive에 'filename_2017.12.28.11.15.csv' 파일이 있고 기본 폴더에는 파일이 없습니다. 그런 다음 아카이브에서 파일을 복사하고 수동으로 작업을 다시 실행하면 완벽하게 실행됩니다. – Night1505

1

경로를 인용하는 것이 좋습니다. 이 경우 공간이 관련되는 경우 요구 사항입니다. 변수 정의를 인용하지 않고 변수가 사용될 때 필요한 곳에 제공하는 것이 더 쉽습니다.

SET filepath=\\server-name\sharename\directory with a space\ 
IF EXIST "%filepath%%oldFile%" DEL "%filepath%%oldFile%" 

제 경험상 경로 끝에 백 슬래시가없는 디렉터리를 두는 것이 가장 좋습니다. 또한 UNC 경로에는 공유 이름이 있어야합니다.

SET "filepath=\\server-name\sharename\directory with a space" 
IF EXIST "%filepath%\%oldFile%" (DEL "%filepath%\%oldFile%")