Nisam siguran da sam dobro razumio sto ti skripta radi..
Dakle sad imaš (nekakav pseudokod):
if "živ" robocopy + log
else log
if "živ" 7z
else log
I problem je ako se robocopy uspješno izvrši i onda se ugasi pc?
Za to ne trebaš dva put provjeravati je li server živ, već samo za robocopy.
Robocopy ti vrati status da li se uspješno izvršio ili ne. Laički, trebaš pokušati robocopy, ako uspije super, ako ne kreiraj taj "fail" file. To se u programiranju zove "try - catch".
Ovako nabrzaka, bez iole relevantnog iskustva sa batch skriptama (u svoju obranu napisao sam "pokoju" shell, python, php skriptu) bi to bilo ovako nekako:
Code:
IF EXIST "\\192.168.121.2\c$" (
robocopy "\\192.168.121.2\c$\share" "D:\Store\ProgressULJ" *.* /mir /copyall /zb /np /xf lbia*.* rcda*.* srta*.* dbi*.* *.lk /r:2 /log+:"C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.txt")
IF %ERRORLEVEL% NEQ 0 GOTO ProcessError
7za a -tzip "D:\Daily\ProgressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.zip" "D:\Store\ProgressULJ\*" -mx=5
IF %ERRORLEVEL% NEQ 0 GOTO ProcessError
exit /b 0
:ProcessError
type NUL > C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%_failed.txt
exit /b 1
Ovo sam nabrzinu sklepa, nemam pojma jesam li krivo pokupio koju zagradu, znak, štoviše i naredbu.. Pokušaj to malo razlomiti da izgleda preglednije.
Možeš se malo igrat s error codovima, vidim npr.
ovdje da se vraćeni statusi manji od 9 ne smatraju fatalnim greškama (za i samo za robocopy, svaka metoda ima svoje, to nije nekakvo općenito pravilo)..
Osim nekakve estetike, tu bi se još moglo par sitnica popraviti. Npr, zašto prazan "fail" file, kad možeš unutra spremiti i koji je error bio, iz varijable %ERRORLEVEL%.. Možda nebi bilo loše i odmah iz skripte poslat mail zajedno sa tom porukom o grešci koristeći preuređeni kod odavde:
Code:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end if %ERRORLEVEL% EQU 8 echo FAIL & goto end if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end if %ERRORLEVEL% EQU 2 echo XTRA & goto end if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end if %ERRORLEVEL% EQU 0 echo No Change & goto end :end
Znači umjesto "echo" što je ispis, spremiš taj string kao poruku unutar maila, ili kao sadržaj onog error fajla...
Ispalo mi je slučajno ovako sve u jednoj liniji zbog c/p, ali neka, da vidiš kako je meni bilo

(to je sa onog linka robocopy exit codes pa možeš tamo vidjet)
Sretno!