일부 파일 및 폴더를 삭제하는 동안 오류를 처리하고 싶습니다.


0

배치 파일을 통해 파일과 폴더를 삭제하는 중에 문제가 발생하면 오류를 처리하고 싶습니다. 내 대상 파일과 폴더가 동일한 서버가 아닌 원격 서버에 있습니다. 나는 pushd, popd 및 rd 명령으로 시도했다. 하지만 불행히도 그것은 errorlevel을 보내지 않습니다 **

내 현재 박쥐 파일은 다음과 같습니다.

set "Adminlogpathtofolder=\\%servername%\e$\Oracle\Middleware\user_projects\domains\Skandia\servers\AdminServer\logs\"
set "Adminpathtofolder=\\%servername%\e$\Oracle\Middleware\user_projects\domains\Skandia\servers\AdminServer\"

if exist "%Adminlogpathtofolder%" goto deleteadminlog
if not exist "%Adminlogpathtofolder%" goto noadminlog

:deleteadminlog
"pushd "%Adminlogpathtofolder%" && (rd /s /q "%Adminlogpathtofolder%" 2>nul & popd)"
if %errorlevel%==0 goto cachedeletesuccess
if NOT %errorlevel%==0 goto cachedeleteunsuccess
:cachedeletesuccess
set "cache_delete_status=success"
echo "Admin Cache Deletion Successfully"
goto exit
:cachedeleteunsuccess
set "cache_delete_status=failure"
echo "Unable to delete the cache"
goto :EOF

:noadminlog
echo "There is no log folder on the Admin Server"
goto exit
:exit

pushd "%Adminpathtofolder%"
for /f "delims=" %%i in ('dir /ad /b^|findstr /vlix "stage security logs"') do rd /s /q "%%i"
popd
if %errorlevel%==0 goto cachedeletesuccess
if NOT %errorlevel%==0 goto cachedeleteunsuccess
:cachedeletesuccess
set "cache_delete_status=success"
echo "Cache Deletion Successfully"
goto exit
:cachedeleteunsuccess
set "cache_delete_status=failure"
echo "Unable to delete the cache"
goto :EOF

누구든지 이걸 도와 줄 수 있어요 ..

다음 조건을 갖춘 나의 요구 사항

  1. 모든 파일 및 폴더 삭제 상위 폴더 (로그) 원격 서버 (예 : 원격 서버 경로)

"Adminlogpathtofolder = \ % 서버 이름 % \ e $ \ Oracle \ Middleware \ user_projects \ domains \ Skandia \ servers \ AdminServer \ logs \"

  1. 일부 제외 항목이있는 모든 파일 및 폴더 삭제 (예 : 다음 경로)

"Adminpathtofolder = \ % 서버 이름 % \ e $ \ Oracle \ Middleware \ user_projects \ domains \ Skandia \ servers \ AdminServer \"

3 개의 폴더와 그 내용 (로그, 보안, 무대)을 제외한 모든 파일과 폴더를 삭제하고 싶습니다.

  1. 오류를 처리하고 싶습니다. 파일이나 폴더를 삭제하는 동안 문제가 발생하면 스크립트에서 나와서 cmd에있는 오류를 반향시켜야합니다. .

답변:


0

왜 사용하지 않는가? IF EXIST 다시? 내 경험에 의하면 ERRORLEVEL 때로는 별나다. (이 경우에는, 더 많은 것을 읽으십시오 ), 대안 (작동하는)이있는 한 사용하십시오!

어쨌든, 여기 내 테스트를 거친 작동 솔루션입니다 :

PUSHD "%Adminlogpathtofolder%"
FOR /F "delims=" %%i IN ('DIR /A:D /B') DO (
    RD /S /Q "%%i" >nul 2>&1
    IF EXIST "%%i" ECHO Failed to delete "%%i" && SET "cache_delete_status=failure"
)
IF "cache_delete_status"=="failure" (ECHO Unable to delete the admin cache) ELSE (ECHO Admin Cache Deletion Successfully & SET "cache_delete_status=success")

그리고 2 부 :

PUSHD "%Adminpathtofolder%"
FOR /F "delims=" %%i IN ('DIR /A:D /B^|FINDSTR /VLIX "stage security logs"') DO (
    RD /S /Q "%%i" >nul 2>&1
    IF EXIST "%%i" ECHO Failed to delete "%%i" && SET "cache_delete_status=failure"
)
IF "cache_delete_status"=="failure" (ECHO Unable to delete the cache) ELSE (ECHO Cache Deletion Successfully & SET "cache_delete_status=success")

이것이 의도적인지 아닌지는 모르지만 변수를 사용합니다. chache_delete_status 두 부분 모두에 대해 두 번째 부분에 오류가 표시 될 수 있습니다. 두 번째 부분에서 다른 변수를 사용하는 것이 좋을 경우 두 번째 부분에서 검사하는 것이 좋습니다.


귀하의 답변뿐만 아니라 @ FatalBulletHit 제안 주셔서 감사합니다. 나는 체크를 사용하고 싶다. [cache_delete_status] 내 다른 일괄 처리 및 삭제의 사람이 실패하면 내 젠킨스 작업을 실패합니다.
Narayana Boominathan

@ FatalBuBulletHit 내가 한 가지 더 의심 스럽습니다. 원격 서버에서 배치 파일을 실행할 방법이 있습니까? 배치 파일은 동일한 원격 서버에도 있습니다. 나는 PSTools로 시도했지만 잘못된 HOME_DIR 경로 : HOME_DIR이 없습니다. HOME_DIR을 현재 폴더로 설정 "." *************************************************** ******************************************** 부동산 이전 종료
Narayana Boominathan

@NarayanaBoominathan 나도 몰라, 미안, 어쩌면이 도움이 : stackoverflow.com/questions/32482483/...
FatalBulletHit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.