[BAT]Script zit vast in een loop?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
Dit: http://hazymat.co.uk/2011/08/amazing-robocopy/ script leek mij wel handig om hier thuis te gebruiken voor m'n backups.

Maar op de een of andere manier zit hij vast in een loop? Wat ik te zien krijg zodra ik hem run:
IP Replied! Checking connection stability...1 of 6
IP Replied! Checking connection stability...2 of 6
IP Replied! Checking connection stability...3 of 6
IP Replied! Checking connection stability...4 of 6
IP Replied! Checking connection stability...5 of 6
Connection appears stable!
Now checking fileshare
Fileshare is visible. Good to go. Starting copying.
robocopy "D:\Mijn afbeeldingen" "\\192.168.1.137 \BACKUP\PCFRANK\Mijn afbeeldingen" /MIR /ETA /XJ /R:10 /W:10
IP Replied! Checking connection stability...1 of 6
IP Replied! Checking connection stability...2 of 6
De laatste 2 regels gaat het dus fout, hij begint weer opnieuw dus. En dit gaat eindeloos zo door. Iemand die ergens de fout ziet? Ik zie hem namelijk niet.

Dit is het script zoals ik het nu heb:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
: 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

Acties:
  • 0 Henk 'm!

  • DeTeraarist
  • Registratie: November 2000
  • Laatst online: 06-10 17:41

DeTeraarist

#Boots2Asses

je script heet robocopy.bat?

Soms, als ik heel stil ben, kan ik de zon horen schijnen


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
:X :X :X :$

Ja...."robocopy.bat". Renamen naar iets anders did the trick. Ik voel mij heeeeeel dom nu :$ Logisch dat hij dan het script weer aanroept idd :X

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

Op Linux geen last van, daar kan je robocopy en robocopy.sh hebben, en robocopy.ksh en robocopy.zsh en, en, tja, noem maar op. Desnoods noem je 't ook robocopy, als 't maar niet in je $PATH staat waar de werkelijke executable is, is er niets aan de hand. En anders doet 't niets :+. Nouja, niets, forkbomb is redelijk aanwezig als je niet oplet })

* Hero of Time vind 't leuk op Linux scripten, geeft veel leukere effecten om een script op 1 distro te maken en uit te voeren op een ander :P

[ Voor 6% gewijzigd door Hero of Time op 18-09-2012 22:06 ]

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

In Windows kan het ook gewoon. Er wordt gewoon geen extentie meegegeven, dat aanpassen naar robocopy.exe (van uitgaand dat het een .exe is), dan zal die nooit de .bat starten.

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
Ik zit nu alleen nog vast wanneer ik mappen met een spatie in de naam (Mijn documenten) wil kopieren. Robocopy gaat dan over de zeik....

VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
'Eerste stuk van het script
Set remotemachine=192.168.1.137
Set copyto="BACKUP\%COMPUTERNAME%\Mijn documenten\"
Set copyfrom="D:\Mijn documenten\"

'Onderste deel van het script
: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 ('%copyto%') do set copyto=%%~a
Set destination=\\%remotemachine%\%copyto%
ECHO on
robocopy %copyfrom% %destination% /MIR /ETA /XJ /R:10 /W:10 /LOG+:backup_logfile.log


Het heeft iets met de quotes te maken, maar ik snap niet precies wat. Heb al geprobeerd om bij de SET de quotes weg te halen of juist te plaatsen, of de "for /f" regels uit te commentaren, maar helpt niet. Robocopy geeft dit als output:
Bron : D:\Mijn documenten" \192.168.1.137\BACKUP\FRANKPC\Mijn documenten \MIR \ETA \XJ \R:10 \W:10 \LOG:backup_logfile.log\
Doel -
De regel "Bron" gaat dus helemaal over de zeik :|

Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 20:41

DukeBox

loves wheat smoothies

geen quotes in je set maar in je command gebruiken.
Dus set copyto=backup\%computername%\My Documents\
en
robocopy "%copyfrom%" ...

[ Voor 44% gewijzigd door DukeBox op 18-09-2012 22:48 ]

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

RaZ schreef op dinsdag 18 september 2012 @ 22:10:
In Windows kan het ook gewoon. Er wordt gewoon geen extentie meegegeven, dat aanpassen naar robocopy.exe (van uitgaand dat het een .exe is), dan zal die nooit de .bat starten.
De grap met Linux is juist dat als een bestand een extensie heeft, je die moet opgeven. Als je je vasthoud aan een principe dat je scripts altijd een extensie geeft, zal je dit probleem dus nooit krijgen ;). En anders kan je net als bij Windows het volledige pad naar de executable geven.


On-topic:
Quotes zijn echt een ramp soms in scripts. De ene keer moet 't wel, de andere keer niet, dan gaat het goed, dan weer niet. Het is daarom handig om je variabelen eerst te controleren via een echo en als de output je niet aan staat, bijvoorbeeld er zijn geen quotes, dan zet je quotes om je variabele om 't zo wel te krijgen. Trial en error. Je zou dan iets als dit krijgen:
code:
1
2
3
echo executing command %var1% %var2% etc.
: of, als 't niet goed gaat
echo executing command "%var1%" "%var2" etc.

De boel heb je al in quotes staan in je voorbeeld. Waarom het dan niet werkt, is mij een raadsel, maar nou heb ik ook geen ervaring met batch scripting. Geef mij maar bash :P.

Btw, waarom zet je eerst variabele %copytoshare%, gebruik je 'm een paar keer, om vervolgens aan het eind in je commando 'm niet te gebruiken. Waar komt %destination% opeens vandaan?

Commandline FTW | Tweakt met mate


  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
DukeBox schreef op dinsdag 18 september 2012 @ 22:47:
geen quotes in je set maar in je command gebruiken.
Dus set copyto=backup\%computername%\My Documents\
en
robocopy "%copyfrom%" ...
Zal het thuis proberen (ben nu aan het werk).
Hero of Time schreef op dinsdag 18 september 2012 @ 23:14:
[...]
[..]
Btw, waarom zet je eerst variabele %copytoshare%, gebruik je 'm een paar keer, om vervolgens aan het eind in je commando 'm niet te gebruiken. Waar komt %destination% opeens vandaan?
Thanks :) %destination%:
Set destination=\\%remotemachine%\%copytoshare% ;)
Pagina: 1