Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- : This script does a basic robocopy, but also it does the following:
- : - test connectivity to the machine (ping). Send WOL Magic Packet if it doesn't respond.
- : - after WOL, wait until the machine appears on the network
- : - regardless of whether or not we got the machine up using WOL, we still verify a level of ping response consistency before continuing
- : - verify the network path is visible before continuing
- : - prompt at the start whether you want to shutdown the machine when finished
- : - no further prompts during the process
- @ECHO OFF
- : SET THE FOLLOWING VARIABLES
- : Set robocopy destination into two variables. They are used individually to test CIFS and PING connectivity then combined to insert into robocopy command
- : We'll strip quotes from the outsides of these, so feel free to use quotes around each varilable - or not.
- Set remotemachine=192.168.1.137
- Set copysource=D:\Mijn afbeeldingen\
- Set copytoshare=BACKUP\%COMPUTERNAME%\Mijn afbeeldingen
- : Time to wait after sending wol packet, before bothering to try to do anything else (approx startup time of remote machine)
- Set timetowol=30
- : If, after sending wol and waiting, there's still no response, we'll wait 1 second and try again.
- : This is the total number of tries. TBH, may as well set this really high and Ctrl-C if you get bored.
- Set pingfaillimit=25
- : What do you consider is a good number of ping receipts to get back before deeming your connection to remote machine is stable? 1 = impatient. 10000 = paranoid. 10 = normal.
- Set stabilitysatisfaction=6
- : Once stability, by the definition of how many pings specified, is attained, we check the copy-to network path is available
- : Frankly, if it isn't, it probably won't become available. And you'll have to figure out the problem separately.
- : But this gives us the option to keep trying x number of times before continuing.
- : Note: this number doesn't correspond to an amount of time. Windows is unpredictable when trying to check fileshares.
- Set filesharefaillimit=15
- : NO MORE VARIABLES TO SET NOW
- Set consecutivepingcheckcount=1
- Set consecutivepingfailcount=1
- Set filesharetestcount=1
- :pingandcheck
- ping /n 2 %remotemachine% | find "TTL=" >nul
- if %errorlevel% == 0 goto reply
- @echo No Reply on that IP! Tried %consecutivepingfailcount% of %pingfaillimit% times
- Set consecutivepingcheckcount=1
- Set /A consecutivepingfailcount+=1
- IF %consecutivepingfailcount% == %pingfaillimit% (
- @echo We didn't get very far did we?
- @echo I waited, but nothing!
- @echo Increase the pingfaillimit variable?
- GOTO fin
- )
- goto pingandcheck
- :reply
- @echo IP Replied! Checking connection stability... %consecutivepingcheckcount% of %stabilitysatisfaction%
- Set /A consecutivepingcheckcount+=1
- IF %consecutivepingcheckcount% == %stabilitysatisfaction% (
- @echo Connection appears stable!
- GOTO checkfileshare
- )
- GOTO pingandcheck
- :checkfileshare
- @echo Now checking fileshare
- IF EXIST \\%remotemachine%\%copytoshare% (
- @echo Fileshare is visible. Good to go. Starting copying.
- GOTO docopy
- )
- @echo Couldn't find fileshare - tried %filesharetestcount% of %filesharefaillimit% times.
- Set /A filesharetestcount+=1
- ping 127.0.0.1 -n 2 >null
- IF %filesharetestcount% == %filesharefaillimit% (
- @echo Failed to find the fileshare. Oh no!
- @echo Maybe verify the fileshare is accessible yourself?
- GOTO fin
- )
- goto checkfileshare
- :docopy
- :first three lines strip quotes if found then combine the machine name and share to give path
- for /f "useback tokens=*" %%a in ('%remotemachine%') do set remotemachine=%%~a
- for /f "useback tokens=*" %%a in ('%copytoshare%') do set copytoshare=%%~a
- Set destination=\\%remotemachine%\%copytoshare%
- ECHO on
- robocopy "%copysource%" "%destination%" /MIR /ETA /XJ /R:10 /W:10
- :fin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement