2017-03-24 2 views
0

Windows 7 64 비트배치 파일의 테스트 오류 수준이 예상 결과를 반환하지 않습니다.

디렉토리에서 다른 디렉토리로 파일을 복사하는 배치 파일을 작성하고 파일을 삭제합니다. 복사하려는 파일이 배치 파일이 실행될 때 다른 프로그램에서 작성 중이며 결과로 "프로세스가 다른 프로세스에서 사용 중이기 때문에 파일에 액세스 할 수 없습니다."라는 오류가 발생하는 경우가 있습니다. 나는이 상태에 대한 errorlevel 테스트를 할 수있을 것으로 기대하고 있었고, 지연 시간에 점프하고 다시 시도 할 때가있었습니다. 나는 IF ErroreleVEL 1 타입 테스트를받을 수 없어서 1 점을 받아서 연기 할 수 있습니다. 나는 errorlevel 주위에 %를 사용하여 모든 종류의 변형을 시도했다. 나는 그것이 "프로세스가 파일에 접근 할 수 없다 ..."오류를 산출하고 있다는 것을 알기 때문에 0이 아닌 결과를 생성하는 것처럼 보일 수 없다. 나는 한 번에이 일을했음을 맹세하지만, 왜 내가 더 이상 일하지 않는지 알아낼 수는 없다. 아래의 훨씬 간단한 테스트를 시도해 보았지만 실패한 삭제 명령은 0이 아닌 오류 수준으로 표시되지 않습니다. 실패한 삭제 명령을 선택하여 지연으로 점프하도록 허용 할 적절한 errorlevel 테스트를 어떻게 구성합니까?

:start 
copy c:\users\pc\documents\recordings\*.mp3 c:\recordings 
del c:\users\pc\documents\recordings\*.mp3 
if errorlevel 1 goto delay 
goto start 
:delay 
echo delay 
ping 1.1.1.1 > nul 
goto start 

답변

0

글쎄, 나는 약간 다른 방식으로 올 수 있었다. 주위를 검색 한 후 기본적으로 내가 원하는 것을 수행 할 수있는 코드를 발견했습니다. 이 스크립트를 필자의 훨씬 더 큰 스크립트에 통합 한 후에는 지연된 파일로 건너 뛰어 파일이 더 이상 잠길 때까지 다시 시도 할 수 있습니다.

@echo off 
2>nul (
>>test.txt echo off 
) && (echo file is not locked) || (echo file is locked) 

그러나 나는 내가 일을 확인 오류 수준을 얻을 수 없습니다 이유에 당황하고있다. 이전에이 작업을했음을 맹세했지만 다시 작동하지 못했습니다. 나는 많은 검색을했고 정말 확실한 답을 찾지 못했습니다. 오류 수준 검사는 효과가 있었 더라면 훨씬 간단했을 것입니다.

--- 갱신 ---

내가 검색 가서 다른 방법이 무엇인지를 내놓았다 일부 코드와 주변 재생 FINDSTR 명령을 발견했다. 나는 "액세스가 거부되었습니다"다른 오류 메시지를 yeilds 읽기 전용 속성을 사용하여 파일을 "잠금"해요하지만 tmp에 파이프되어있는 오류 코드를 검색 findstr를 사용하고 있다면 그것은 한 가지 할 일이 있다면 그렇지 않으면, 다른 것을해라. 일하는 것 같습니다. 이 코드를 내 코드에 통합하여 작동 원리를 확인할 수 있습니다.

@echo off 
cls 
:start 
del c:\recording.mp3 2> tmp > nul 
findstr "Access" tmp > nul 
if %ERRORLEVEL% EQU 0 GOTO delay 
ECHO NO DELAY 
ping 1.1.1.1 > nul 
goto start 
:delay 
echo DELAY 
ping 1.1.1.1 -n 1 > nul 
goto start 
관련 문제