Deseja manipular o erro ao excluir alguns arquivos e pastas

0

Eu quero lidar com o erro se algo der errado ao excluir os arquivos e pastas via arquivo em lotes. Meus arquivos e pastas de destino estão no servidor remoto e não no mesmo servidor. Eu tentei com os comandos pushd, popd e rd mas infelizmente ele não envia o errorlevel **

Meu arquivo bat atual da seguinte forma

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

Alguém pode me ajudar nisso ..

MEU Requisito com as seguintes condições

  1. Exclua todos os arquivos e pastas espere a pasta pai (log) em um servidor remoto, por exemplo, o caminho do servidor remoto

"Adminlogpathtofolder = \% nomedoservidor% \ e $ \ Oracle \ Middleware \ user_projects \ domains \ Skandia \ servidores \ AdminServer \ logs \"

  1. Exclua todos os arquivos e pastas com alguma exclusão, por exemplo, este é o caminho a seguir

"Adminpathtofolder = \% nomedoservidor% \ e $ \ Oracle \ Middleware \ user_projects \ domains \ Skandia \ servidores \ AdminServer \"

Eu quero excluir todos os arquivos e pastas, exceto algumas três pastas e seu conteúdo (logs, segurança, estágio)

  1. Eu quero lidar com o erro se algo der errado ao excluir os arquivos ou a pasta que o script precisa para sair e ecoar o erro que obtive no cmd .
por Narayana Boominathan 12.02.2018 / 14:53

1 resposta

0

Por que não usar IF EXIST novamente? Pela minha experiência, ERRORLEVEL é estranho às vezes (como é neste caso, leia mais ), por tanto tempo como há uma alternativa (que funciona), use!

De qualquer forma, aqui está minha solução testada e funcionando:

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")

E para a 2ª parte:

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")

Eu não sei se isso é proposital ou não, mas você usa a variável chache_delete_status para ambas as partes, então isso pode mostrar um erro na segunda parte, mesmo que não haja nenhuma. Eu recomendo que você use uma variável diferente para ser verificada na segunda parte, se você não quer que isso aconteça.

    
por 12.02.2018 / 16:56