Bat Datei in grafische Oberfläche bringen bzw. Visual Studio
Hallo Zusammen,
kurz und knapp, ich habe
- 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
Wie wäre dann hier der Code?
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
Wie wäre dann hier der Code?
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 269677
Url: https://administrator.de/contentid/269677
Ausgedruckt am: 24.11.2024 um 18:11 Uhr
30 Kommentare
Neuester Kommentar
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
[OT]
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]
Zitat von @emeriks:
Alle Programme, selbst die "einfachsten", bestehen neben Bits & Bytes vor allem aus Schmalz & ###.
E.
Hmmm, emeriks,Alle Programme, selbst die "einfachsten", bestehen neben Bits & Bytes vor allem aus Schmalz & ###.
E.
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]
Na also, dann ist das hier ja erledigt ...
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 ...
Wofür gibt es Dokumentationen ?!
https://msdn.microsoft.com/de-de/library/h6ak8zt5(v=vs.110).aspx
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")
https://msdn.microsoft.com/de-de/library/h6ak8zt5(v=vs.110).aspx
Servus, ich muss @114757 leider recht geben...
Seine Antwort ist TOP, das kannst du aber auch versuchen:
ENTWEDER:
ODER:
(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
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
Ist jetzt alles aus dem Kopf raus geschrieben, aber sollte funktionieren
Synchroniere alle *.txt Daten von Ornder1 nach Ordner2
Ganz einfach: Gibt.Es.NichtWenn 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.
Timer Class
Textfeld und Button hast Du ja bereits gelernt.
Process ja auch schon (process.kill).
Und Robocopy selbst hat auch tolle Kommandozeilenparameter.
E.
Textfeld und Button hast Du ja bereits gelernt.
Process ja auch schon (process.kill).
Und Robocopy selbst hat auch tolle Kommandozeilenparameter.
E.
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 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
Zitat von @114757:
Also nimm dir ein Buch oder die 1 Millionen Quellen im Netz und lerne erst mal die Grundlagen vernünftig.
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.
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.
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.
"Brett auf Kopf schlag " ...
Ein paar wichtige Anmerkungen zu deinem Code:
Du siehst es gibt noch einiges zu lernen
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.
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
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.
Hier mal was zum spielen .. dann ist das Thema hoffentlich "ad akta"
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
Naja das ist noch Meilen von einer richtigen Synchtronisation entfernt 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.
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.