View Single Post
Staro 17.12.2015., 21:52   #2
rodney
only fool, not a horse
Moj komp
 
rodney's Avatar
 
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,280
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!
__________________
"I intend to live forever. So far, so good."

job security - example
rodney je offline   Reply With Quote