[DOS] Batchfile voor automatisch synchroniseren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Beste tweakers, sinds een tijdje heb ik een NAS server die draait op FreeNAS.
Nu zit ik al een grote maand te zoeken naar een efficiente manier om mijn bestanden van computers te synchroniseren naar de server (en naar de andere computers).

Ik heb dit ondermeer al geprobeert met Rsync (deltacopy), Syncback en dergelijke programma's, maar deze lijken niet te doen wat ik wil.

Het programma Syncback van Windows zelf lijkt de beste oplossing, aangezien deze aan al mijn eisen voldoet, behalve de automatisatie ervan...
Ik kan enkel met Windows Taakplanner een schema op basis van een bepaald tijdstip instellen, maar aangezien mijn server niet 24/7 aanstaat is dit geen oplossing.

Hier had ik reeds een topic over bij NOS (http://gathering.tweakers.net/forum/list_messages/1407237). Daar hebben ze me uiteindelijk aangeraden een batch bestand te maken. Dit lijkt inderdaad de beste oplossing voor mij, maar aangezien dit niets meer te maken heeft met NT, heb ik een nieuw topic geopend hier in "Programming".

De synchronisatie moet als volgende verlopen:

Ik heb dus namelijk een laptop, 2 computers en een server staan. Dat zijn dus 3 computers in totaal en een server.

Windows start op:
batch bestand start automatisch zonder ik er iets van merk (met taakplanner ingesteld):
Alle pings en synchronisaties worden in de achtergrond uitgevoerd, ik mag er niets van merken.
Ook als de synchronisatie voltooid is.

Tot zo ver mijn kennis van DOS..:
  • @ echo off
  • ping http://192.168.1.2 (computer1)
  • succesvol: JA => synctoy.exe, na starten synctoy.exe ga naar ping computer 2
  • succesvol: NEE => ga naar ping computer 2
  • ping http://192.168.1.3 (computer2)
  • succesvol: JA => synctoy.exe, na starten synctoy.exe ga naar ping computer 3
  • succesvol: NEE => ga naar ping computer 3
  • ping http://192.168.1.4 (computer3)
  • succesvol: JA => synctoy.exe, na starten synctoy.exe ga naar ping server
  • succesvol: NEE => ga naar ping server
  • ping http://192.168.1.250 (FreeNAS server)
  • succesvol: JA => synctoy.exe, daarna WACHT 3 MINUTEN
  • succesvol: NEE => WACHT 3 MINUTEN
  • Na 3 minuten herstart het pingen van computer 1
Als de ping gedaan is moet ik voorwaarden geven met "IF", alleen weet ik niet goed hoe ik deze moet plaatsen. Natuurlijk is dit geen goede batchfile, ik het gewoon hetgeen wat er zou moeten gebeuren opgeschreven.

Kan iemand me mee helpen hier een correct script van te maken?

[ Voor 12% gewijzigd door egonolieux op 12-06-2010 21:16 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je code post, gebruik dan code tags aub.
Verder: Waar hoort mijn topic?
PRG >> WOS

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Je hoef eigenlijk geen IF's te gebruiken; het kan namelijk nog simpeler.

code:
1
2
3
4
5
6
7
8
@ECHO OFF
CLS

REM Sync Computer 1
Ping 192.168.1.2 -n 1 -w 10 >nul && start /wait "Synctoy" synctoy.exe

REM Sync Computer 2
Ping 192.168.1.3 -n 1 -w 10 >nul && start /wait "Synctoy" synctoy.exe


Etc.. etc.

Die '&&' is eigenlijk een "IF" statement en wordt uitgevoerd als de Ping statement een OK heeft gegeven. 'Start /wait' geeft aan dat synctoy wordt gestart en gewacht wordt totdat deze afgesloten is.

[ Voor 5% gewijzigd door Krypt op 12-06-2010 22:03 ]

Pvouput live


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Ping geeft echter geen betrouwbare exit code op windows (en is in iedergeva erg ongedocumenteerd en wisseld zeker tussen windows versies) ....er zijn simpele hulp utilities die dat wel doen

maar waarom niet simpel

code:
1
2
3
4
5
IF NOT EXIST  x:\FileOnMapping.txt goto FUUUUUCK
echo maak de backup. 
return
:FUUUUUCK
echo mount bestaat niet?

[ Voor 13% gewijzigd door leuk_he op 12-06-2010 22:24 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Krypt schreef op zaterdag 12 juni 2010 @ 22:03:
Je hoef eigenlijk geen IF's te gebruiken; het kan namelijk nog simpeler.

code:
1
2
3
4
5
6
7
8
@ECHO OFF
CLS

REM Sync Computer 1
Ping 192.168.1.2 -n 1 -w 10 >nul && start /wait "Synctoy" synctoy.exe

REM Sync Computer 2
Ping 192.168.1.3 -n 1 -w 10 >nul && start /wait "Synctoy" synctoy.exe


Etc.. etc.

Die '&&' is eigenlijk een "IF" statement en wordt uitgevoerd als de Ping statement een OK heeft gegeven. 'Start /wait' geeft aan dat synctoy wordt gestart en gewacht wordt totdat deze afgesloten is.
Reeds bedankt voor de hulp :), ik heb namelijk een klein probleempje: ik moet namelijk "C:\Windows\SyncToy\SyncToyCmd.exe" (zonder ") met parameter -R uitvoeren om het synchroniseren te starten.

Nu krijg ik constant het bericht dat er niets te synchroniseren is; met andere woorden de parameter wil niet correct gelezen worden. hoe precies moet ik die parameter er dan bijzetten om het wel correct te laten werken?

Bovendien, is het mogelijk om alle command prompt vensters die verschijnen te verbergen? met andere woorden als de synchronisatie start dat ik hier helemaal niets van merk.

Acties:
  • 0 Henk 'm!

  • EXX
  • Registratie: Juni 2001
  • Laatst online: 12:34

EXX

EXtended eXchange

Is ipv Synctoy xxcopy niets voor jou?

For it is the doom of men that they forget...           Huidige en vroegere hardware specs         The Z80 is still alive!


Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Batch.. yech.
Waarom geen VBscript?
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
strServer = "jouwserver-of-IPadres"
strPingStatus = PingStatus(strServer)
If strPingStatus = "Success" Then
    'Wscript.Echo "Success pinging " & strServer
    Call Onnet 'dat is je subroutine die doet wat jij wil
Else
    'Wscript.Echo "Failure pinging " & strServer & ": " & strPingStatus
    Call noNet  'wat er moet gebeuren als er geen verbinding is
End If

'******************************************************************************

Function PingStatus(strServer)


    strWorkstation = "."
    Set objWMIService = GetObject("winmgmts:" _
      & "{impersonationLevel=impersonate}!\\" & strWorkstation & "\root\cimv2")
    Set colPings = objWMIService.ExecQuery _
      ("SELECT * FROM Win32_PingStatus WHERE Address = '" & strServer & "'")
    For Each objPing in colPings
        Select Case objPing.StatusCode
            Case 0 PingStatus = "Success"
            Case Else PingStatus = "Status code " & objPing.StatusCode & _
               " - Unable to determine cause of failure."
        End Select
    Next

End Function


win32_Pingstatus werkt zonder dosboxen of andere dingen.

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
alt-92 schreef op zondag 13 juni 2010 @ 00:52:
Batch.. yech.
Waarom geen VBscript?
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
strServer = "jouwserver-of-IPadres"
strPingStatus = PingStatus(strServer)
If strPingStatus = "Success" Then
    'Wscript.Echo "Success pinging " & strServer
    Call Onnet 'dat is je subroutine die doet wat jij wil
Else
    'Wscript.Echo "Failure pinging " & strServer & ": " & strPingStatus
    Call noNet  'wat er moet gebeuren als er geen verbinding is
End If

'******************************************************************************

Function PingStatus(strServer)


    strWorkstation = "."
    Set objWMIService = GetObject("winmgmts:" _
      & "{impersonationLevel=impersonate}!\\" & strWorkstation & "\root\cimv2")
    Set colPings = objWMIService.ExecQuery _
      ("SELECT * FROM Win32_PingStatus WHERE Address = '" & strServer & "'")
    For Each objPing in colPings
        Select Case objPing.StatusCode
            Case 0 PingStatus = "Success"
            Case Else PingStatus = "Status code " & objPing.StatusCode & _
               " - Unable to determine cause of failure."
        End Select
    Next

End Function


win32_Pingstatus werkt zonder dosboxen of andere dingen.
Alvast bedankt voor de snelle reacties en alle hulp :)

Dus als ik het goed begrijp:

Ik geef het IP adres van de gewenste computer/server (zonder "" of niet?)

"Call Onnet 'dat is je subroutine die doet wat jij wil" wordt dus "C:\Windows\SyncToy\SyncToyCmd -R" (zonder "")

"Call noNet 'wat er moet gebeuren als er geen verbinding is": als er geen verbinding is moet hij gewoon starten met de volgende ping van de volgende computer; hoe geef ik dit weer?

Als ik alledrie mijn computers wil pingen en synchroniseren moet ik dus 3x dit script na elkaar plaatsen?
En wat doe ik dan het die "End Function" op het einde? (mijn excuses, ik heb totaal geen ervaring met programmeren).
Dat ziet er ook wel handig uit maar ik zou voorlopig bij synctoy willen blijven aangezien dit met weinig "command-line" te doen is. De uitkomst van beide programma's is toch hetzelfde.

[ Voor 68% gewijzigd door egonolieux op 13-06-2010 11:23 ]


Acties:
  • 0 Henk 'm!

  • ApC_IcE
  • Registratie: December 2001
  • Laatst online: 11:10

ApC_IcE

Aan elk einde zit een begin

Misschien kort door de bocht, en misschien niet helemaal wat je zoekt omdat je er niets van wilt merken.

Maar ik gebruik om (handmatig) te syncen naar mijn nas: Allway Sync : http://allwaysync.com/

Ik gebruik dan de handmatige features om 1 keer in de zoveel tijd foto's en andere belangrijke bestanden te syncen.
maar ik mag aannemen dat dit automatisch ook kan zonder GUI.

Ik heb me niet verdiept in dit programma maar misschien dat je er iets aan hebt?

als dit niet het geval is, beschouw deze post als ongelezen :)

succes ermee.

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

egon088 schreef op zondag 13 juni 2010 @ 01:42:
Dus als ik het goed begrijp:

Ik geef het IP adres van de gewenste computer/server (zonder "" of niet?)
Nee, bij VBscript heb je te maken met andere regeltjes.
met " " dus.
"Call Onnet 'dat is je subroutine die doet wat jij wil" wordt dus "C:\Windows\SyncToy\SyncToyCmd -R" (zonder "")
Nee, ook niet :)
Daarvoor maak je eerst een Shell object en daarmee kun je je commandline aanroepen.
Visual Basic:
1
2
Set objShell = CreateObject("Wscript.Shell")
objShell.run("C:\Windows\SyncToy\SyncToyCmd -R"),1,true


Dat je ergens geen ervaring mee hebt is niet erg, maar je kan dan op z'n minst gaan [google=VBscript guide] of [google=vbscript windows howto] .
Het is niet moeilijk, maar wel wat anders als batch.

[ Voor 13% gewijzigd door alt-92 op 13-06-2010 10:50 ]

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

Verwijderd

egon088 schreef op zaterdag 12 juni 2010 @ 23:26:
[...]
Bovendien, is het mogelijk om alle command prompt vensters die verschijnen te verbergen? met andere woorden als de synchronisatie start dat ik hier helemaal niets van merk.
Run whether user is logged on or not in de eigenschappen van je scheduled task aanzetten.

Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
ApC_IcE schreef op zondag 13 juni 2010 @ 01:51:
Misschien kort door de bocht, en misschien niet helemaal wat je zoekt omdat je er niets van wilt merken.

Maar ik gebruik om (handmatig) te syncen naar mijn nas: Allway Sync : http://allwaysync.com/

Ik gebruik dan de handmatige features om 1 keer in de zoveel tijd foto's en andere belangrijke bestanden te syncen.
maar ik mag aannemen dat dit automatisch ook kan zonder GUI.

Ik heb me niet verdiept in dit programma maar misschien dat je er iets aan hebt?

als dit niet het geval is, beschouw deze post als ongelezen :)

succes ermee.
Dat ziet er ongeveer hetzelfde uit als synctoy, mischien dat ik het later eens uitprobeer :)

Nu heb ik dus het volgende: een synchronisatie voor de server en de laptop. Dit lijkt perfect te werken maar alleen vraag ik me af of ik die "call onnet" nu mocht weglaten of niet, aangezien me verteld werd dat ik het moest doen met "Set Objective....". (Aangezien het script lijkt te werken)

Trouwens, hoe stel ik in wat er moet gebeuren als er geen verbinding is? Ook al is er informatie op google te vinden lijkt me dit een complexe taak (aldus voor mij).

Dus mijn VBscript ziet er reeds zo uit:

code:
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
strServer = "192.168.1.250" 
strPingStatus = PingStatus(strServer) 

If strPingStatus = "Success" Then 
    'Wscript.Echo "Success pinging " & strServer"
    Set objShell = CreateObject("Wscript.Shell") 
    objShell.run("C:\Windows\SyncToy\SyncToyCmd -R"),1,true

Else 
    'Wscript.Echo "Failure pinging " & strServer & ": " & strPingStatus 
    Call noNet  'wat er moet gebeuren als er geen verbinding is

End If 

'****************************************************************************** 

Function PingStatus(strServer) 


    strWorkstation = "." 
    Set objWMIService = GetObject("winmgmts:" _ 
      & "{impersonationLevel=impersonate}!\\" & strWorkstation & "\root\cimv2") 
    Set colPings = objWMIService.ExecQuery _ 
      ("SELECT * FROM Win32_PingStatus WHERE Address = '" & strServer & "'") 
    For Each objPing in colPings 
        Select Case objPing.StatusCode 
            Case 0 PingStatus = "Success" 
            Case Else PingStatus = "Status code " & objPing.StatusCode & _ 
               " - Unable to determine cause of failure." 
        End Select 
    Next 

End Function

strLaptop = "192.168.1.4" 
strPingStatus = PingStatus(strLaptop) 

If strPingStatus = "Success" Then 
    'Wscript.Echo "Success pinging " & strLaptop"
    Set objShell = CreateObject("Wscript.Shell") 
    objShell.run("C:\Windows\SyncToy\SyncToyCmd -R"),1,true

Else 
    'Wscript.Echo "Failure pinging " & strServer & ": " & strPingStatus 
    Call noNet  'wat er moet gebeuren als er geen verbinding is

End If 

'****************************************************************************** 

Function PingStatus(strLaptop) 


    strWorkstation = "." 
    Set objWMIService = GetObject("winmgmts:" _ 
      & "{impersonationLevel=impersonate}!\\" & strWorkstation & "\root\cimv2") 
    Set colPings = objWMIService.ExecQuery _ 
      ("SELECT * FROM Win32_PingStatus WHERE Address = '" & strLaptop & "'") 
    For Each objPing in colPings 
        Select Case objPing.StatusCode 
            Case 0 PingStatus = "Success" 
            Case Else PingStatus = "Status code " & objPing.StatusCode & _ 
               " - Unable to determine cause of failure." 
        End Select 
    Next 

End Function

Acties:
  • 0 Henk 'm!

Verwijderd

alt-92 schreef op zondag 13 juni 2010 @ 10:47:

Dat je ergens geen ervaring mee hebt is niet erg, maar je kan dan op z'n minst gaan [google=VBscript guide] of [google=vbscript windows howto] .
Het is niet moeilijk, maar wel wat anders als batch.
Beetje kort door de bocht om iemand die _geen_ VB kent, en voor wie er door een hulpvaardige medetweaker voor het eerst een VB script wordt voorgesteld, zo af te katten.

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

egon088 schreef op zondag 13 juni 2010 @ 11:34:

Nu heb ik dus het volgende: een synchronisatie voor de server en de laptop. Dit lijkt perfect te werken maar alleen vraag ik me af of ik die "call onnet" nu mocht weglaten of niet, aangezien me verteld werd dat ik het moest doen met "Set Objective....".

Trouwens, hoe stel ik in wat er moet gebeuren als er geen verbinding is? Ook al is er informatie op google te vinden lijkt me dit een complexe taak (aldus voor mij).
Je zal echt wat meer moeten inlezen over VBscript, functies, subroutines en programmeren (met name dan je programma flow). Dan leer je ook gelijk de juiste termen te gebruiken (Set Objective? ) en snap je tenminste wat je aan het koppie-peesten bent.

Die functie die je nu nog een keer herhaalt is juist generiek zodat je die meerdere keren kan aanroepen zonder helemaal opnieuw te schrijven. Die hoeft er maar 1x te staan.
De stServer is je variabele die je in een For/Next loop uit een rijtje pc's kan lezen en door die functie kan laten lopen.


dat je iets automatiseren wil, prima, maar neem dan ook wel de moeite om je wat meer te verdiepen in wat je aangereikt wordt aan opties ;)
Verwijderd schreef op zondag 13 juni 2010 @ 11:38:
[...]
Beetje kort door de bocht om iemand die _geen_ VB kent, en voor wie er door een hulpvaardige medetweaker voor het eerst een VB script wordt voorgesteld, zo af te katten.
1) dat stuk script is van mij
2) Ik vind het niet vreemd om iemand erop te wijzen dat er zoiets als VBscript primers en howto's zijn die heel goed via Google of wat dan ook terug te vinden zijn als je daar niet mee bekend bent.

[ Voor 30% gewijzigd door alt-92 op 13-06-2010 11:50 ]

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • Mijzelf
  • Registratie: September 2004
  • Niet online
leuk_he schreef op zaterdag 12 juni 2010 @ 22:17:
Ping geeft echter geen betrouwbare exit code op windows (en is in iedergeva erg ongedocumenteerd en wisseld zeker tussen windows versies)
Dat kun je opvangen met zoiets:
code:
1
2
3
4
5
6
7
8
9
PING -n 1 <ip-adres1> | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto NoPing1

REM Doe je actie voor ip-adres1

:NoPing1  
PING -n 1 <ip-adres2> | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto NoPing2
...

Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
@Leuk_he; Ik gebruik al tijden de exitcode van ping om uit te lezen of een host reachable is of niet. Nooit geen problemen mee gehad; zeker niet met thuis/hobby-bob scriptjes. Dan maakt het eigenlijk ook geen moer uit of ie 100% werkt of niet.

Vind het een beetje overkill om met VB aan te komen zetten terwijl het met 5 regels batch ook kan. Scheelt 65 regels aan code. Dat die synctoycmd niet werkte in zijn batch komt omdat er met een parameter wel quotes gebruikt moeten worden. ipv "synctoy.exe" "synctoycmd.exe -r". c'est ca.

@alt-92; sinds wanneer ben je anti-batch geworden? Volgens mij kom ik je en zowat elk batch-topic tegen.

Pvouput live


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Mijzelf schreef op zondag 13 juni 2010 @ 18:51:
[...]

Dat kun je opvangen met zoiets:
code:
1
2
3
4
5
6
7
8
9
PING -n 1 <ip-adres1> | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto NoPing1

REM Doe je actie voor ip-adres1

:NoPing1  
PING -n 1 <ip-adres2> | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto NoPing2
...
Dit wil niet werken: de promt zegt dat het teken "|" niet herkent wordt of niet gevonden kan worden.

Alleszins allemaal erg bedankt voor alle hulp.

Ik denk toch dat ik voor een simpel batchbestandje ga aangezien die VBscript mij iets te complex en te groot lijkt voor slechts een simpele taak (sorry Alt-92 :-().
Ondertussen heb ik gevonden hoe ik alle dosboxen moet verbergen, ook van de taakbalk :).

Alleen zit ik met nog één klein probleempje. Aangezien het script alle computers pingt zal hij ook de computer van waaruit het script uitgevoerd wordt pingen, en zo zal synctoy ook in werking treden wat eigenlijk niet de bedoeling is. Ik ben dit momenteel aan het uitzoeken maar als jullie een oplossing hebben mogen jullie me die altijd geven :).

[ Voor 19% gewijzigd door egonolieux op 14-06-2010 14:42 ]


Acties:
  • 0 Henk 'm!

  • wagenveld
  • Registratie: Februari 2002
  • Niet online
Om hoeveel data gaat het? Als het niet in de GBs loopt, waarom niet makkelijk doen en https://www.dropbox.com/ gebruiken? Moet je alleen even uitzoeken of je een client voor je NAS kan vinden.

edit: nog wat leuke software: http://www.ifolder.com/ifolder

[ Voor 14% gewijzigd door wagenveld op 14-06-2010 15:08 ]


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
wagenveld schreef op maandag 14 juni 2010 @ 14:58:
Om hoeveel data gaat het? Als het niet in de GBs loopt, waarom niet makkelijk doen en https://www.dropbox.com/ gebruiken? Moet je alleen even uitzoeken of je een client voor je NAS kan vinden.

edit: nog wat leuke software: http://www.ifolder.com/ifolder
Het gaat wel over een redelijk grote hoeveelheid data, ongeveer zo een 30GB voorlopig.
Ik probeer in het algemeen ook storage op het internet te vermijden, want ik wil namelijk mijn hoge snelheid van mijn thuisnetwerk (gigabit ethernet) optimaal benutten.

iFolder ziet er mij wel interessant uit, maar eens ik zelf alles met batchfiles gedaan heb komt dit toch op hetzelfde neer. Ook kan ik batchfiles meer aanpassen naar mijn behoeften. & bovendien kreeg ik een constante foutmelding bij het installeren dat ik niet met der server kon verbinden of zoiets, laat dus maar zitten, maar toch bedankt voor de tips :).

Nu heb ik nog een tweede probleem in verband met die dosboxen verbergen. Het eerste scherm van dos dat tevoorschijn zou moeten komen wordt inderdaad succesvol verborgen, maar nu wordt er nog een tweede in die eerste uitgevoerd (SyncToyCmd). Die wordt dus niet verborgen. Hoe zou ik dit het beste kunnen oplossen?

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 15:34

Reptile209

- gers -

egon088 schreef op maandag 14 juni 2010 @ 14:38:
[...]
Dit wil niet werken: de promt zegt dat het teken "|" niet herkent wordt of niet gevonden kan worden.
[...]
Da's raar. Gebruik je daar "shift-backslash" voor, dus zeg maar de 90 graden gedraaide versie van -- ?
Probeer deze eens letterlijk na te doen, die moet op iedere PC werken (127.0.0.1 is de localhost).
H:\>ping -n 1 127.0.0.1 | find "TTL="

geeft als resultaat:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Mijzelf
  • Registratie: September 2004
  • Niet online
Dit wil niet werken: de promt zegt dat het teken "|" niet herkent wordt of niet gevonden kan worden.
*knip* wel lief blijven! Als je het copy-en-paste direct uit dit forum werkt het niet, maar als je ijverig overtypt werkt het wel.

Iemand doet ergens iets smerigs met het pijpje.

[ Voor 7% gewijzigd door TheVMaster op 14-06-2010 16:08 ]


Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Met "Ping %Computername%" moet je een eind komen.
code:
1
For /f "tokens=1,2,3,*" %%a in ('ping %computername% -n 1 ^| Find /i "["') do Set LocalIP=%%c


Dan krijg je "[IP]" in de variabele LocalIP gezet. Met een IF kun je daar op matchen.

Pvouput live


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Mijzelf schreef op maandag 14 juni 2010 @ 15:45:
[...]
*knip* wel lief blijven!Als je het copy-en-paste direct uit dit forum werkt het niet, maar als je ijverig overtypt werkt het wel.

Iemand doet ergens iets smerigs met het pijpje.
Ik heb getypt... het werkte gewoon niet

[ Voor 6% gewijzigd door TheVMaster op 14-06-2010 16:09 ]


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Sorry dat ik de laatste dagen nog niet gereageerd heb, zit namelijk in de examens :).

Toch heb ik ondertussen nog een paar dingen gedaan.
Ik gebruik het script dat "Krypt" me bezorgd heeft, want hetgeen dat "Mijzelf" voorstelde werkt ondertussen, maar synctoy wil maar niet starten. (Toch bedankt voor de hulp)
Doe verder geen moeite, ik ben blij met 1 dat werkt :p

Het ziet er dus zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CLS

REM Sync Homeserver
Ping 192.168.1.250 -n 1 -w 10 >nul && start /wait "Synctoy" "C:\Windows\Homeserver\Synchronisation\SyncToy\SyncToyCmd" -R

REM Sync i7 920
Ping 192.168.1.2 -n 1 -w 10 >nul && start /wait "Synctoy" "C:\Windows\Homeserver\Synchronisation\SyncToy\SyncToyCmd" -R

REM Sync Phenom X2 545
Ping 192.168.1.3 -n 1 -w 10 >nul && start /wait "Synctoy" "C:\Windows\Homeserver\Synchronisation\SyncToy\SyncToyCmd" -R

REM Sync Laptop
Ping 192.168.1.4 -n 1 -w 10 >nul && start /wait "Synctoy" "C:\Windows\Homeserver\Synchronisation\SyncToy\SyncToyCmd" -R

exit


Verder heb ik geregeld dat alles in de achtergrond wordt uitgevoerd met dit VBscript:

code:
1
2
3
Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Windows\Homeserver\Synchronisation\SyncScripts\FileSyncDOS.bat" & Chr(34), 0
Set WshShell = Nothing


Nu zit ik toch met een aantal kleine probleempjes:

Namelijk als de synchronisatie start, dan wordt er in de dosprompt die reeds verborgen is, een tweede prompt uitgevoerd, namelijk die van SyncToyCmd. Deze wordt dus niet verborgen door het VBscript.

Aangezien de batchfile gestart wordt vanuit dit VBscript om alles te verbergen, is het dus onmogelijk om iets vanuit het de batchfile zelf. Hoe zou ik dit nu het beste kunnen oplossen?

Een tweede probleem is dat wanneer er bijvoorbeeld reeds een synchronisatie naar de server aan de gang is, dat de synchronisatie die reeds bezig is nogmaals gestart zal worden als deze niet binnen het tijdsinterval van taakplanner beeindigd is (10 minuten).

Met andere woorden, hoe laat ik een synchronisatie die reeds aan de gang is overslaan?
Of zal er gewoon niets gebeuren aangezien de batch file reeds opgestart was?

Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Dat kan je heel simpel oplossen.

In het script wat je oproept, zet je eerst een check of een bepaald bestandje in de tempfolder bestaat. Bestaat deze file niet, dan kan ie doorgaan en anders exit ie het script gewoon.
Het eerste wat je vervolgens in je script zet, is dat bestandje aanmaken in de tempfolder; welke je na een goede sync weer verwijdert.

1e probleempje; zet '/MIN' bij het start statement. Dan is ie minimized en heeft ie de focus niet. Start /? intypen geeft je wat meer info.

[ Voor 16% gewijzigd door Krypt op 21-06-2010 12:38 ]

Pvouput live


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Krypt schreef op zondag 20 juni 2010 @ 21:13:
Dat kan je heel simpel oplossen.

In het script wat je oproept, zet je eerst een check of een bepaald bestandje in de tempfolder bestaat. Bestaat deze file niet, dan kan ie doorgaan en anders exit ie het script gewoon.
Het eerste wat je vervolgens in je script zet, is dat bestandje aanmaken in de tempfolder; welke je na een goede sync weer verwijderd.

1e probleempje; zet '/MIN' bij het start statement. Dan is ie minimized en heeft ie de focus niet. Start /? intypen geeft je wat meer info.
Je brengt me ineens op een idee; is het ook mogelijk om een bepaalde map te checken of die van grootte (bytes) veranderd is? Of als dat niet gaat dat er een verandering in een document/map waargenomen kan worden? Moest dat lukken zou het in een klap alle problemen dan de baan vegen.

Trouwens, met /MIN /B is alles mooi in de achtergrond uitgevoerd :). bedankt hiervoor

[ Voor 3% gewijzigd door egonolieux op 21-06-2010 12:28 ]


Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Als iets qua grootte wilt controleren of ie veranderd is, dan moet je iets van een database gaan opslaan.
Vervolgens de gegevens uitlezen, controleren, acties uitvoeren en database updaten.

Maar waarom zou je dat eigenlijk willen? Synctoy doet dit toch voor je?

Pvouput live


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Krypt schreef op maandag 21 juni 2010 @ 12:41:
Als iets qua grootte wilt controleren of ie veranderd is, dan moet je iets van een database gaan opslaan.
Vervolgens de gegevens uitlezen, controleren, acties uitvoeren en database updaten.

Maar waarom zou je dat eigenlijk willen? Synctoy doet dit toch voor je?
De eigenlijke bedoeling is dat vanaf er een bestand veranderd wordt, of vanaf er een bestand bijkomt, dat synctoy dat ziet en automatisch begint te synchroniseren (dit met een batchfile).

Dus het zou zo moeten gaan:

1# er wordt gekeken of er veranderingen zijn in een bepaalde map (grootte in bytes)

2# indien dit niet het geval is gaat hij automatisch naar de volgende map

3# indien dit wel van toepassing is dan gaat er gepingt worden naar alle computers in het netwerk

4# als er geen andere computers bereikbaar (niet gepingt kunnen worden) zijn in het netwerk, dan sluit de batchfile zich af en herhaalt zich binnen de X aantal minuten (ingesteld via taakplanner).

5# als er wel computers in het netwerk beschikbaar zijn (gepingt kunnen worden), dan start de synchronisatie via SyncToyCmd voor elke computer die in het netwerk beschikbaar is (op een bepaalde volgorde).

Op deze manier heb ik volgende problemen niet:

- Ik moet geen zeer regelmatig synchronisatieschema opstellen om mijn bestanden zo snel mogelijk overal gelijk te hebben.

- De harde schijven van de server moeten minder werken aangezien er alleen gesynchroniseerd zal worden als er een bestand verandert of bijkomt, en niet op een bepaald voorgeprogrammeerd tijdstip.

- Synctoy zal efficienter en sneller werken: als ik elke map (afbeeldingen, documenten,muziek...) apart check op veranderingen in plaats van alles samen. Apart gaat niet zoals het nu is doordat het onmogelijk is te achterhalen in welke map de verandering heeft plaatsgevonden. Bijgevolg ook minder werking van de harde schijven.

- Netwerk minder belast door constante overdracht door synchronisatie

- Geen kans op afsluiten tijdens geplande synchronisatie van bestanden volgens tijdschema (en eventueel gedeeltelijk verlies van deze bestanden): ik weet zelf wanneer ik laatst een bestand veranderd heb en kan gerust mijn computer uitzetten.




Niets anders dan voordelen geeft dit dus, en stap 2 tot en met 5 zijn reeds gerealiseerd :)

Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Dat de schijven minder werken en dat synctoy efficienter werkt met een script dat controleerd of er iets veranderd is, is niet geheel de waarheid.

Of Synctoy of een script nu indexeert of er veranderingen zijn maakt weinig verschil; ze moeten beide de schijven aanspreken en alle mappen doorzoeken. Dus die dingen kun je wegstrepen. Verder denk ik dat synctoy een stuk efficienter geschreven zal zijn dan een zelfgebakken batchscript. Overigens; als je batchscript de check heeft gedaan, dan start ie synctoy en die doet het nog een keertje over (dat is imho pas inefficient en moeten de schijven meer gebruikt worden)

Als je het echt wilt, dan moet je een DLL gaan schrijven die een hook maakt in de procedure die bestanden naar schijf wegschrijft, zodat deze ook direct gesynct worden.

Ik denk dat je dit laatste niet zomaar kan realiseren; zeker niet om het feit dat er al zoiets bestaat :) En dat heet Offline Folders alleen is het de andere kant op. Sla alle bestanden op, op de server en maak deze folders allemaal offline beschikbaar op alle clients. Als de clients geen connectie hebben, dan kunnen ze op dezelfde manier naar de schijf toe zoals ze gewend zijn als ze online zijn; en bij connectie wordt alle gesynchroniseerd.

Pvouput live


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Daar heb je inderdaad een punt, daar had ik zelf niet aan gedacht; niet de ideale oplossing dus.
Offline folders zijn dan ook weer geen goede oplossing aangezien die maar in een richting gaan.

Ik heb nu even zitten nadenken hoe ik het het best zou aanpakken.

Het huidige batchbestand ziet er dus zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
CLS

REM Sync Homeserver
Ping 192.168.1.250 -n 1 -w 10 >nul && start /MIN /B /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\SyncToy\SyncToyCmd" -R

REM Sync i7 920
Ping 192.168.1.2 -n 1 -w 10 >nul && start /MIN /B /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\SyncToy\SyncToyCmd" -R

REM Sync Phenom X2 545
Ping 192.168.1.3 -n 1 -w 10 >nul && start /MIN /B /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\SyncToy\SyncToyCmd" -R

REM Sync Laptop
Ping 192.168.1.4 -n 1 -w 10 >nul && start /MIN /B /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\SyncToy\SyncToyCmd" -R


Nu zou ik het volgende willen doen;

#1 Er wordt gepingt naar bijvoorbeeld de server, deze is succesvol en de synchronisatie a.d.h.v het batchbestand wordt uitgevoerd. Elke 3 minuten wordt het batchbestand via taakplanner opnieuw uitgevoerd.

#2 Als er reeds een synchronisatie gestart is, en deze is nog niet afgelopen na 3 minuten, dan wordt deze automatisch overgeslagen als taakplanner het batchbestand na 3 minuten weer gestart heeft.

#3 Als er reeds een synchronisatie naar een bepaalde computer is gebeurd, dan zal deze computer gedurende 2 uur niet aan een nieuwe synchronisatietaak kunnen beginnen, ook al is de ping succesvol.

Stap 2 en 3 kunnen eigenlijk als 1 beschouwd worden, namelijk dat vanaf er een synchronisatie start dat deze gedurdende een periode niet opnieuw gestart kan worden.

Op deze manier wordt er 1x gesynchroniseerd vanaf er een andere computer/server online komt, en om alles "up-to-date" te houden - moesten er in de tussentijd eventuele veranderingen aan bestanden zijn uitgevoerd - wordt de synchronisatie pas na bijvoorbeeld 2-3 uur opnieuw uitgevoerd.

Zou dit realiseerbaar zijn met Batch of VBS?

[ Voor 18% gewijzigd door egonolieux op 25-06-2010 13:07 ]


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Ondertussen heb ik zelf wat kunnen in elkaar flanselen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CLS

REM Sync Homeserver
:start

ping 192.168.1.250
IF ERRORLEVEL 1 goto Fail
IF ERRORLEVEL 0 goto Succeed

:Fail

choice /c 1 /d 1 /t 250 %1 > nul
goto start

:Succeed

start /MIN /B /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\SyncToy\SyncToyCmd" -R
choice /c 1 /d 1 /t 10800 %1 > nul
goto start


Dit doet perfect wat ik wil, maar dan wel maar voor 1 computer. Nu zou ik dit moeten kunnen doen voor alle computers in het netwerk. Het probleem is dus dat wanneer er een synchronisatie gedaan is, dat alles 10800 seconde word opgehouden, en ondertussen kan er niet voortgepingt worden.

Ik heb reeds geprobeerd meerdere batchfiles te maken met elk de synchronisatie voor elke computer apart. Dus voordat de 10800 seconden wachttijd begint, word er doorverwezen naar het volgende batchbestand voor de volgende computer. Dit lijkt mij geen goede oplossing aangezien het pingen zichzelf elke 3 minuten moet herhalen, en het eindresultaat is eigenlijk niet veel anders.

[ Voor 125% gewijzigd door egonolieux op 26-06-2010 18:11 ]


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Na heel wat opzoekwerk en uitproberen is het me uiteindelijk toch gelukt :). Misschien kon het korter of eenvoudiger, maar het werkt in ieder geval. Ik start dus met het script van de server en deze opent automatisch hetgeen van de laptop enzovoort, zodat er een soort van kettingreactie onstaat.

Hier is het:

code:
1
2
3
Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Windows\HomeNetwork\Synchronisation\SyncScripts\ScriptsLaptop\SyncServer.bat" & Chr(34), 0
Set WshShell = Nothing


SyncServer
code:
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
:PreStart

PING -n 1 192.168.1.250 | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto PreRetry
IF ERRORLEVEL 0 goto PreSucceed

:PreRetry

start C:\Windows\HomeNetwork\Synchronisation\SyncScripts\ScriptsLaptop\SyncPC1
choice /c 1 /d 1 /t 250 > nul
goto Permstart

:PreSucceed

start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerA
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerB
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerC
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerD
start C:\Windows\HomeNetwork\Synchronisation\SyncScripts\ScriptsLaptop\SyncPC1
choice /c 1 /d 1 /t 9999 > nul
choice /c 1 /d 1 /t 8001 > nul
goto PermStart

:PermStart

PING -n 1 192.168.1.250 | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto PermRetry
IF ERRORLEVEL 0 goto PermSucceed

:PermRetry

choice /c 1 /d 1 /t 250 > nul
goto PermStart

:PermSucceed

start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerA
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerB
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerC
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopServerD
choice /c 1 /d 1 /t 9999 > nul
choice /c 1 /d 1 /t 8001 > nul
goto PermStart


SyncPC1
code:
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
:PreStart

PING -n 1 192.168.1.2 | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto PreRetry
IF ERRORLEVEL 0 goto PreSucceed

:PreRetry

start C:\Windows\HomeNetwork\Synchronisation\SyncScripts\ScriptsLaptop\SyncPC2
choice /c 1 /d 1 /t 250 > nul
goto PermStart

:PreSucceed

start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1A
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1B
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1C
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1D
start C:\Windows\HomeNetwork\Synchronisation\SyncScripts\ScriptsLaptop\SyncPC2
choice /c 1 /d 1 /t 9999 > nul
choice /c 1 /d 1 /t 8001 > nul
goto PermStart

:PermStart

PING -n 1 192.168.1.2 | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto PermRetry
IF ERRORLEVEL 0 goto PermSucceed

:PermRetry

choice /c 1 /d 1 /t 250 > nul
goto PermStart

:PermSucceed

start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1A
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1B
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1C
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R LaptopPC1D
choice /c 1 /d 1 /t 9999 > nul
choice /c 1 /d 1 /t 8001 > nul
goto PermStart


SyncPC2
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
:PermStart

PING -n 1 192.168.1.3 | FIND "TTL=" >NUL 
IF ERRORLEVEL 1 goto PermRetry
IF ERRORLEVEL 0 goto PermSucceed

:PermRetry

choice /c 1 /d 1 /t 250 > nul
goto PermStart

:PermSucceed

start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R XXXXX
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R XXXXX
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R XXXXX
start /wait "Synctoy" "C:\Windows\HomeNetwork\Synchronisation\Programs\Installed Programs\SyncToy\SyncToyCmd" -R XXXXX
choice /c 1 /d 1 /t 9999 > nul
choice /c 1 /d 1 /t 8001 > nul
goto PermStart


Voor elke computer heb ik dit dus met enkele lichte aanpassingen gemaakt, wat eigenlijk wel veel werk was, maar in ieder geval werkt het perfect nu :)
Pagina: 1