Я хочу обработать ошибку, если что-то пошло не так при удалении файлов и папок через командный файл. Мои целевые файлы и папки находятся на удаленном сервере, а не на том же сервере. Я пытался с командами pushd, popd и rd, но, к сожалению, он не отправляет уровень ошибки **

Мой текущий файл bat следующим образом

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 =\% ServerName%\ е $\ Oracle\ Middleware\ user_projects\ домены \ Skandia \ серверов \ AdminServer \ журналы \"

  1. Удалите все файлы и папки с некоторым исключением, скажем, например, это следующий путь

"Adminpathtofolder =\% ServerName%\ е $\ Oracle\ Middleware\ user_projects\ областей \ Skandia \ серверов \ AdminServer \"

Я хочу удалить все файлы и папки, кроме некоторых трех папок и их содержимого (журналы, безопасность, этап)

  1. Я хочу обработать ошибку, если что-то пошло не так при удалении файлов или папок, в которых должен появиться скрипт и повторить ошибку, которую я получил в cmd.

1 ответ1

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 для обеих частей, поэтому она может показать ошибку во 2-й части, даже если ее не было. Я рекомендую вам использовать другую переменную для проверки во 2-й части, если вы не хотите, чтобы это произошло.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .