andinistrator1
Goto Top

Bat Datei in grafische Oberfläche bringen bzw. Visual Studio

Hallo Zusammen,
kurz und knapp, ich habe

eine *.bat, Inhalt Robocopy erstellt
- synchronisiert \\PC1\Ordner mit \\PC2\Ordner
- dann weiterhin \\PC3\Ordner synchronisiert mit \\PC2\Ordner

Der Hintergrund dazu: PC1 erstellt Daten, welche auf PC3 müssen. Da PC1 nicht immer an ist, benötige ich PC2 als Ablage, weil dieser immer an ist. D.h. erstellt der User auf PC1 sein Daten, legt er diese auf PC2 ab. Wenn PC3 eingeschalten wird, schaut er auf PC2 ob es etwas neues gibt.

Ich hab hier ein simples robocopy erstellt, mir ist auch bewusst, dass es bereits Programme gibt die genau das machen. Die *.bat habe ich in eine unsichtbare *.exe umgewandelt.

Nun zur Frage:
Ich möchte statt dem schwarzen CMD Fenster eine grafische Oberfläche erstellen, wo der User die Pfade eingeben kann und quasi auf "jetzt ausführen" klickt, danach das Fenster minimieren kann. Kennt jemand Tools, mit welche sowas unkompliziert zu machen ist? Mir fehlt es hier an Hintergrund, vielleicht hat jemand ein Tipp wie ich hier schnell ans Ziel komme (ohne erst 5 Tage Grundkurs zu machen). Ich hab sogar noch ein Visual Studio aus der Ausbildungszeit rumliegen, aber hier keine Ahnung ob das gehen würde... .

Im Prinzip ganz einfach:

Ordner 1 soll sich mit Ordner 2 synchronisieren
Ordner 2 soll sich mit Ordner 3 synchronisieren
31945be200be6d3e8ba48feb4f38a0db

Wie wäre dann hier der Code?
165524eaaaace9ee6d3756c166974044


Public Class Form1

    Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    End Sub
End Class

Content-ID: 269677

Url: https://administrator.de/contentid/269677

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

emeriks
emeriks 20.04.2015 um 10:01:59 Uhr
Goto Top
Hi,
suche mal bei Goggle nach "robocopy GUI". Da solltest Du was finden.

E.
Andinistrator1
Andinistrator1 20.04.2015 um 10:08:26 Uhr
Goto Top
Ja den kenn ich. Ich wollte soetwas aber gern mal selber erstellen.

Mit Visual Studio muss ich mich erst durch die Grundlagen kämpfen: https://www.youtube.com/watch?v=mqgcU1IgotI

Vielleicht weiß jemand ein Tool, womit es einfacher geht.
114757
114757 20.04.2015 aktualisiert um 10:26:34 Uhr
Goto Top
Mit Visual Studio muss ich mich erst durch die Grundlagen kämpfen
Naja ein paar Textboxen ein Button und den Robocopy Befehl mit Process.Start() ausgeführt, ist wohl nicht zu viel verlangt, wenn du schon was selber machen willst...
Das schafft sogar mein Neffe und der ist erst 11.
Wenn's hoch kommt 1-2 Zeilen Code zu schreiben ...
http://www.dotnetperls.com/process-vbnet

Gruß jodel32
emeriks
emeriks 20.04.2015 aktualisiert um 12:00:28 Uhr
Goto Top
Hört sich so an, als wenn Du eine Smartphone App suchst, mit der Du das mit ein paar Fingerwisch "programmieren" kannst. Wirste nicht finden. Alle Programme, selbst die "einfachsten", bestehen neben Bits & Bytes vor allem aus Schmalz & Schweiß.

E.
Andinistrator1
Andinistrator1 20.04.2015 um 10:40:26 Uhr
Goto Top
Danke - das mein ich doch wohl auch.
Biber
Biber 20.04.2015 aktualisiert um 12:03:47 Uhr
Goto Top
[OT]
Zitat von @emeriks:

Alle Programme, selbst die "einfachsten", bestehen neben Bits & Bytes vor allem aus Schmalz & ###.

E.
Hmmm, emeriks,
könnte es sein, dass bei diesem Montach-Morgen-Schüttelreim wegen einer Freudschen Fehlschaltung ein Buchstabe "w" vergessen wurde?

Sollte es so sein, bitte editieren und das "w" an geeigneter Stelle ergänzen.

Das ist ja ein anständiges Forum hier mit FSK-6-Freigabe und wir wollen doch der Jugend weiterhin ein Vorbild bleiben.

Grüße
Biber
[Edit] @ emeriks: Danke für die umgehende Tippfehlerberichtigung. [/Edit]

[/OT]
114757
114757 20.04.2015 aktualisiert um 11:58:43 Uhr
Goto Top
Zitat von @Andinistrator1:
Danke - das mein ich doch wohl auch.
Na also, dann ist das hier ja erledigt ...
emeriks
emeriks 20.04.2015 um 12:01:59 Uhr
Goto Top
Hmmm, emeriks,
könnte es sein, dass bei diesem Montach-Morgen-Schüttelreim wegen einer Freudschen Fehlschaltung ein Buchstabe
"w" vergessen wurde?
Uuuups .... face-smile

E.
Andinistrator1
Andinistrator1 21.04.2015 um 07:58:07 Uhr
Goto Top
So schnell gebe ich nicht auf, hier gibt es bestimmt welche die mir den Code "blind" runterschreiben können.

Ich hab die Frage nochmal aktualisiert, das Konzept erstellt.

Vielen Dank für die Hilfe!
emeriks
emeriks 21.04.2015 aktualisiert um 08:45:40 Uhr
Goto Top
Schau mal hier.Da ist sogar ein Beispiel in VB dabei.

E.
Andinistrator1
Andinistrator1 21.04.2015 um 10:22:06 Uhr
Goto Top
Vielen Dank, die Seite ist auf jeden Fall interessant, nur bin ich noch nicht soweit im Thema. Bisher hab ich nur mal ein YouTube zum "einfachen Rechner" gemacht.

Ich hänge jetzt an dem Code, dass mir z.B. Ordner1 mit Ordner2 synchronisiert wird, also das was passieren soll, wenn ich auf "Button1" klicke:

Public Class Form1

    Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Process()

    End Sub
End Class
114757
114757 21.04.2015 aktualisiert um 10:45:33 Uhr
Goto Top
Oh man, in der Zeit in der du dich mit solch unnützen Fragen hier im Forum rumtreibst hätte man das schon längst gemacht, deine Suchmaschine hat entweder eine Knacks oder du bist einfach zu faul, meine Güte etwas Enthusiasmus musst du schon mitbringen.
Das du in der Zeit nur das Wort process() hinbekommen hast ist echt arm, sorry ....

Hier ein Beispiel für Sync von Ordner 1 nach 2, Steuerelementnamen bitte anpassen wenn sie verändert wurden. Den zweiten Sync solltest du damit selber hinbekommen ...
System.Diagnostics.Process.Start("robocopy.exe","""" & Textbox1.Text & """ """ & Textbox2.Text & """ *.* /MIR")  
Wofür gibt es Dokumentationen ?!
https://msdn.microsoft.com/de-de/library/h6ak8zt5(v=vs.110).aspx
Andinistrator1
Andinistrator1 21.04.2015 um 10:50:39 Uhr
Goto Top
Charmant wie immer ;)

Danke Jodel32, ich hätte aber gerne statt der Robocopy das Thema in C# erstellt, damit ich eine grafisch Oberfläche mit Eingabe der Parameter habe - wenn das geht. Also statt robocopy C#, Vielleicht kennst du ja ein Converter ;))))
joehuaba
joehuaba 21.04.2015 aktualisiert um 10:55:45 Uhr
Goto Top
Servus, ich muss @114757 leider recht geben...
Seine Antwort ist TOP, das kannst du aber auch versuchen:

ENTWEDER:
Public Class Form1
     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

          My.Computer.FileSystem.CopyDirectory(textfeld1.text, textfeld2.text, True)

     End Sub
End Class


ODER:
Public Class Form1
     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

          Shell ("cmd.exe copy " + textfeld1.Text + " " + textfeld2.Text)  

     End Sub
End Class
(Hier in Beispiel 2 könntest du nach "Shell(" deine robocopy Befehle einfügen.


Ist jetzt alles aus dem Kopf raus geschrieben, aber sollte funktionieren face-smile
Andinistrator1
Andinistrator1 21.04.2015 aktualisiert um 12:21:14 Uhr
Goto Top
Vielen Dank, das funktioniert - so komm ich schonmal in das Thema rein.

Alle Daten werden Ordner1 in Ordner2 und von Ordner2 in Ordner3 kopiert - jedoch nicht synchroniert.

Public Class Form1

    Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        My.Computer.FileSystem.CopyDirectory(TextBox1.Text, TextBox2.Text, True)
        My.Computer.FileSystem.CopyDirectory(TextBox2.Text, TextBox3.Text, True)
        MessageBox.Show(text:="Synchronisation gestartet.")  

    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click


        MessageBox.Show(text:="Synchronisation beendet.")  
    End Sub
End Class

Ich nutze die Suchmaschine, jedoch wirft diese komische Sachen aus. Wie ist der Befehl z.B. für

Synchroniere alle *.txt Daten von Ornder1 nach Ordner2

?
emeriks
emeriks 21.04.2015 um 13:26:35 Uhr
Goto Top
Synchroniere alle *.txt Daten von Ornder1 nach Ordner2
Ganz einfach: Gibt.Es.Nicht
Wenn Du den mit Option "?" startest, dann kommt "ja".

Wie ich schon geschrieben habe: Schmalz und Schweiß. Da Du beides offensichtlich vermeiden willst, bleibt Dir nur, auf vorhandene Lösungen zurückzugreifen. Robocopy ist eine davon. Eine sehr gute sogar. Nutze ich nur für sowas.
Oder Du kaufst Dir gleich ein fertiges Programm dafür. Gibt es massig am Markt. Oder als Freeware. Gibt es auch genügend.

E.
Andinistrator1
Andinistrator1 21.04.2015 um 15:05:47 Uhr
Goto Top
Nein - ich will es selber machen, der Weg ist das Ziel.
//Für Mitleser: Ein Tool wäre SyncToy vom Microsoft (http://www.microsoft.com/en-us/download/details.aspx?id=15155)/)

Also damit kann ich leben:

- synchronisiert Ordner1 mit Ordner2
- synchronisiert Ordner2 mit Ordner3
- synchronisiert nur *.txt Daten

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox1.Text & """ """ & TextBox2.Text & """ *.txt /MIR")  
        System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox2.Text & """ """ & TextBox3.Text & """ *.txt /MIR")  

    End Sub
End Class
3c64c6772596fc661465fbe6ac15f08b


Das ist schonmal sehr hilfreich!

Jetzt wäre es noch schön wenn jemand weiß:

- wie bekomme ich hier eine Schleife rein, dass hier alle 60 Sekunden synchronisiert wird
(evtl. über ein weiteres Textfeld in dem man die Sekunden eingeben kann)
- wenn ich einen "Ende" Button hinzufüge, muss das ja dann wieder zu stoppen sein
emeriks
emeriks 21.04.2015 um 15:13:04 Uhr
Goto Top
Timer Class

Textfeld und Button hast Du ja bereits gelernt.

Process ja auch schon (process.kill).

Und Robocopy selbst hat auch tolle Kommandozeilenparameter.

E.
114757
114757 21.04.2015 aktualisiert um 20:25:26 Uhr
Goto Top
Charmant wie immer ;)
Naja, wenn sich hier jeder übers Forum eine Programmiersprache beibringen lassen würde, wären wir in 200 Jahren noch beim 1 x 1...
Also nimm dir ein Buch oder die 1 Millionen Quellen im Netz und lerne erst mal die Grundlagen vernünftig. Solltest du als Administrator (sagt zumindest dein Profil) eigentlich wissen face-confused wie das so mit dem Lernen funktioniert. Wenn du dann was nicht verstehst und eine Frage stellst ist das OK, aber so ist das nur Faulheit.

Ich geh ja auch nicht zum Bäcker und backe da meine Brötchen unter Anleitung des Bäckers selber. Leute gibt's ....

Sich hier jede Funktion und Befehl erklären lassen grenzt schon an absoluter Dreistigkeit und zeugt leider nicht von besonderer Intelligenz.

So hart das klingen mag, aber so ist es nun mal, da werden mir hier sicherlich einige Kollegen zustimmen.

Gruß jodel32
wiesi200
wiesi200 21.04.2015 um 21:05:22 Uhr
Goto Top
Zitat von @114757:

Also nimm dir ein Buch oder die 1 Millionen Quellen im Netz und lerne erst mal die Grundlagen vernünftig.

Würd ich auch sagen, ich hab mir echt auch mal angetan das ich das eine oder andere "Lernvideo" auf Youtube und sogar auf video2brain antue, zum teil auch zwecks Programmierung.

Mein Fazit, Youtube das sind Leute die selber von nix Ahnung haben aber das kostet ja nix da was rein zu stellen.
Professionelle Lernplattform, schon und gut wenn man schnell mal einen Funktionsüberblick haben will und den Spaß nebenbei in der Mittagspause ansieht. Aber lernen tut man da auch nicht viel.
Andinistrator1
Andinistrator1 21.04.2015 um 21:22:15 Uhr
Goto Top
Zitat von @114757:
Naja, wenn sich hier jeder übers Forum eine Programmiersprache beibringen lassen würde, wären wir in 200 Jahren
noch beim 1 x 1...
Ich finde die Community hier hervorragend. Gestern konnte ich grad mal Visual Studio öffnen, heute kann ich immerhin mal eine Oberfläche zaubern welche eine Robocopy öffnen oder einfach nur Daten von A nach B bringt.

Also nimm dir ein Buch oder die 1 Millionen Quellen im Netz und lerne erst mal die Grundlagen vernünftig. Solltest du als
Administrator (sagt zumindest dein Profil) eigentlich wissen face-confused wie das so mit dem Lernen funktioniert. Wenn du dann was nicht
verstehst und eine Frage stellst ist das OK, aber so ist das nur Faulheit.

Ich geh ja auch nicht zum Bäcker und backe da meine Brötchen unter Anleitung des Bäckers selber. Leute gibt's

Sich hier jede Funktion und Befehl erklären lassen grenzt schon an absoluter Dreistigkeit und zeugt leider nicht von
besonderer Intelligenz.
Ich geb dir Recht @114757, ich habe absolut keine Ahnung in der Hinsicht und wurde bisher super von den Kollegen in www.Administror.de geführt. Die Grundlagen werde ich mir aneignen, ich hab mir hierzu bereits Lektüre bestellt, danke für den Tipp. Ich hatte mir ein praktischen Beispiel für den Anfang gesucht, anstatt immer einen "einfachen Rechner" zu erstellen. Wenn ich dann mal die Funktionen und Parameter aus dem FF beherrsche wie z.B. "World-of-Warcraft-Attribute" freue mich "besondere Intelligenz" zu erlangen. Bis es soweit ist freue ich mich über sinnvolle Beiträge, welche zum Thema beitragen. Persönliche Befindlichkeiten darfst du mir per PN schicken (oder dir die Zeit sparen). Vielen Dank.

Ich suche weiterhin Hilfe für

- Eine 60-Sekunden-Schleife, die den Befehl solange wiederholt, bis man diesen Prozess
- mit einem Button2_Click beenden kann

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox1.Text & """ """ & TextBox2.Text & """ *.txt /MIR")  
        System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox2.Text & """ """ & TextBox3.Text & """ *.txt /MIR")  
        MessageBox.Show(text:="Synchronisation gestartet.")  

    End Sub

Vielen Dank für eure Hilfe!
Andinistrator1
Andinistrator1 21.04.2015 aktualisiert um 21:25:20 Uhr
Goto Top
@@wiesi200
Ich habe mich für
Visual C# 2012: Das umfassende Handbuch: Spracheinführung, Objektorientierung, Programmiertechniken (Galileo Computing)
entschieden.

Hast du vielleicht einen anderen/besseren Tipp für Anfänger?
wiesi200
wiesi200 21.04.2015 um 21:32:32 Uhr
Goto Top
Nö, hab da auch mit ner älteren Version angefangen. Nicht gleich Kapitel überspringen bei den Grundlagen wenn es dich momentan nicht interessiert

Dann noch ein paar eigene kleine Projekte ausdenken (nicht gleich übertreiben) und du solltest schnell auf Kurs sein. Das kommt dann alles schnell mit der Übung und den Herausforderung die du damit lösen musst.
Andinistrator1
Andinistrator1 21.04.2015 um 22:01:15 Uhr
Goto Top
Zum heutigen Abschluss noch der Code zum Programm, welches sich ohne Zugriff auf den Taskmanager nicht schließen liese ;)
- synchronisiert alle 3 Sekunden *.txt Daten
- leider poppt das CMD Fenster mit auf
- Verzicht auf MessageBox

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Line1:
        System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox1.Text & """ """ & TextBox2.Text & """ *.txt /MIR")  
        System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox2.Text & """ """ & TextBox3.Text & """ *.txt /MIR")  

        System.Threading.Thread.Sleep(3000)

        GoTo Line1

    End Sub
End Class
114757
114757 22.04.2015, aktualisiert am 23.04.2015 um 09:15:55 Uhr
Goto Top
"Brett auf Kopf schlag face-big-smile" ...

Ein paar wichtige Anmerkungen zu deinem Code:
  • Dein Script startet die Synchronisierung beider Robocopy Prozesse parallel ohne aufeinander zu warten -> kann gut gehen muss aber nicht. Process.Start wartet nicht bis der Prozess beendet ist ! Wenn du das willst muss man eine Instanz eines Process Objects erstellen und dann mit der Methode WaitForExit() auf das Ende warten.
  • Die Folge: Läuft die Sychronisierung länger als 3 Sekunden hast du parallel laufende Robocopy-Prozesse die dich in die Quere kommen = Tod
  • Mit deinem Thread.Sleep blockst du die Möglichkeit das der User die Oberfläche weiter bedienen kann "User Thread ist blockiert" = macht man nicht ! Deswegen lässt man sowas in einem separaten Thread laufen (Timer / Backgroundworker/ separater Thread)
  • Die Pfade solltest du auch auf Existenz prüfen

Du siehst es gibt noch einiges zu lernen face-smile

Gruß jodel32

p.s. und nimm den Code besser wieder aus deinem Posting raus, sonst kommt noch jemand anderes auf die Idee den Mist zu verwenden.
Andinistrator1
Andinistrator1 23.04.2015 um 17:52:38 Uhr
Goto Top
Danke für den Tipp, da ich gestern anderweitig gebunden geb ich mal Feedback:

Public Class Form1
    ' Eigenen Thread erstellen, welcher HINTER dem Start und Stop Button liegt.  
    ' Damit blockiert der Prozess die Button nicht.  
    Dim thread As Threading.Thread
    Dim i As Integer = 1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        thread = New Threading.Thread(AddressOf Synchronistaion)
        thread.Start()
        ' Start Synchronisation.  
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        thread.Abort()
        ' optional wenn "thread.Abort()" nicht funktioniert, kann man den Prozess abschießen:  
        'For Each Process In System.Diagnostics.Process.GetProcessesByName("Synchronisation")  
        'Process.Kill()  
        'Next  
    End Sub

    Private Sub Synchronistaion()
        ' Programm Synchronisation.  
        ' wird nach 5 Sekunden wiederholt  
        Do
            System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox1.Text & """ """ & TextBox2.Text & """ *.txt /MIR").WaitForExit()  
            System.Diagnostics.Process.Start("robocopy.exe", """" & TextBox2.Text & """ """ & TextBox3.Text & """ *.txt /MIR").WaitForExit()  

            System.Threading.Thread.Sleep(5000)
            'Schleife = Loop  
        Loop
    End Sub
End Class

unprofessionell ist aber
- Robocopy Fenster poppt immer auf
- schließt man das Programm über das X (oben rechts), läuft der Prozess weiter,
-- starte ich das Programm nochmal, dann gibt es 2 und mehr Prozesse
- zu Thread.Sleep finde ich keine Alternative, d.h. in der 1/2 Sekunden wird kurz geblockt
114757
Lösung 114757 23.04.2015, aktualisiert am 16.05.2015 um 11:57:28 Uhr
Goto Top
Hier mal was zum spielen .. dann ist das Thema hoffentlich "ad akta" face-wink

7bc9df2b8160b17a792fa4c4e653ecee
Public Class Form1
    Private WithEvents timer As New Timer
    Private isRunning As Boolean = False
    Private proc As Process

    Private Sub btnStartSync_Click(sender As System.Object, e As System.EventArgs) Handles btnStartSync.Click
        If isRunning Then
            timer.Stop()
            If Not proc.HasExited Then
                Try
                    proc.Kill()
                Catch ex As Exception
                    MsgBox(ex.Message, vbCritical)
                End Try
            End If
            isRunning = False
            grpControls.Enabled = True
            btnStartSync.Text = "Synchronisation starten"  
        Else
            isRunning = True
            grpControls.Enabled = False
            btnStartSync.Text = "Synchronisation stoppen"  
            timer.Start()
        End If

    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Try
            timer.Stop()
            If Not proc.HasExited Then
                proc.Kill()
            End If
        Catch ex As Exception
            MsgBox(ex.Message, vbCritical)
        End Try
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With timer
            .Interval = txtInterval.Value * 1000
            .Enabled = False
        End With
    End Sub

    Private Sub timer_Tick(sender As Object, e As System.EventArgs) Handles Timer.Tick
        Synchronize()
    End Sub

    Private Sub Synchronize()
        proc = New Process
        Try
            timer.Stop()
            With proc.StartInfo
                .FileName = "robocopy.exe"  
                .Arguments = """" & txtFolder1.Text & """ """ & txtFolder2.Text & """ *.txt /MIR"  
                .CreateNoWindow = True
                .WindowStyle = ProcessWindowStyle.Hidden
            End With
            With proc
                .Start()
                .WaitForExit()
                .StartInfo.Arguments = """" & txtFolder2.Text & """ """ & txtFolder3.Text & """ *.txt /MIR"  
                .Start()
                .WaitForExit()
            End With
            timer.Start()
        Catch ex As Exception
            proc.Close()
            timer.Stop()
            MsgBox(ex.Message, vbCritical)
            Me.Close()
        End Try
    End Sub

    Private Sub txtInterval_ValueChanged(sender As System.Object, e As System.EventArgs) Handles txtInterval.ValueChanged
        timer.Interval = txtInterval.Value * 1000
    End Sub
End Class
Andinistrator1
Andinistrator1 24.04.2015 um 12:05:01 Uhr
Goto Top
VIELEN DANK jodel32!!!!!! Ich probiere es über das Wochenende! Beim alten bin ich auch weiter.

Den Timer hab ich gefunden - danke für die Hilfe:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = True
        ' Timmer Start  
    End Sub

   Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        SyncA()
        SyncB()
        ' Wenn Timer los dann starte Private Sub SyncA() und SyncB  
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Timer1.Enabled = False
        ' Timer Stop  
    End Sub

Dann möchte ich emeriks These wiederlegen, dass man eben schon eine Synchronisation per VB bauen kann.
Ich bin erfolgreich mit:
"Schau in Ordner1, ist das auch in 2? Wenn nicht, dann kopiere."

    Private Sub SyncA()
        Log1("...")  
        Dim vglA = System.IO.Directory.GetFiles(TextBox1.Text)
        ' vglA = Abgleich Dateiname in Textbox1  
        For Each dt In vglA
            Dim dtname = dt.Substring(TextBox1.Text.Length)
            ' dtname = Dateipfad - Pfadangabe, es bleibt Dateiname *.txt  
            If Not System.IO.File.Exists(TextBox2.Text & dtname) Then
                System.IO.File.Copy(dt, TextBox2.Text & dtname)
                Log1(dtname)
                ' Wenn nicht vorhanden dann kopierte  
            End If
            ' Sonst mach nichts  
        Next

    End Sub

Jetzt bastel ich grad an:
- "Schau in Ordner2, ist das auch in 1? Wenn nicht, dann lösche."
- und dann halt nur *.txt Dateien (momentan sind es alle Dateien)

=> Das wäre das synchron.
Andinistrator1
Andinistrator1 25.04.2015 aktualisiert um 09:59:16 Uhr
Goto Top
Zitat von @emeriks:


Ganz einfach: Gibt.Es.Nicht

Guten Morgen @emeriks und zusammen, also ich bin noch Anfänger. Aber eine Synchronisation habe ich so erreicht:

pro: es öffnet sich keine Robocopy im Hintergrund
contra: gleicht alle Dateitypen ab, nicht speziell z.B. *.txt

    Private Sub SyncA()
        Dim Vergleich1 = System.IO.Directory.GetFiles(TextBox1.Text)
        Dim Vergleich2 = System.IO.Directory.GetFiles(TextBox2.Text)

        For Each Datei1 In Vergleich1
            Dim dtname = Datei1.Substring(TextBox1.Text.Length)
            If Not System.IO.File.Exists(TextBox2.Text & dtname) Then
                System.IO.File.Copy(Datei1, TextBox2.Text & dtname)
            End If
        Next
        For Each Datei2 In Vergleich2
            Dim dtname = Datei2.Substring(TextBox2.Text.Length)
            If Not System.IO.File.Exists(TextBox1.Text & dtname) Then
                System.IO.File.Delete(Datei2)
            End If
        Next
    End Sub

    Private Sub SyncB()
        Dim Vergleich2 = System.IO.Directory.GetFiles(TextBox2.Text)
        Dim Vergleich3 = System.IO.Directory.GetFiles(TextBox3.Text)

        For Each Datei2 In Vergleich2
            Dim dtname = Datei2.Substring(TextBox2.Text.Length)
            If Not System.IO.File.Exists(TextBox3.Text & dtname) Then
                System.IO.File.Copy(Datei2, TextBox3.Text & dtname)
            End If
        Next
        For Each Datei3 In Vergleich3
            Dim dtname = Datei3.Substring(TextBox3.Text.Length)
            If Not System.IO.File.Exists(TextBox2.Text & dtname) Then
                System.IO.File.Delete(Datei3)
            End If
        Next
    End Sub
114757
114757 25.04.2015 aktualisiert um 11:38:18 Uhr
Goto Top
Naja das ist noch Meilen von einer richtigen Synchtronisation entfernt face-wink Stichwort Datumsvergleich etc. pp.

Das Thema ist ja eigentlich abgehakt, den Beitrag bitte noch auf gelöst setzen. Danke.
Deine Programmieranfänge musst du ja nicht unbedingt jetzt alle hier abladen, das bringt nichts.