Progressbar und Batchfile

  • VB.NET

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Progressbar und Batchfile

    Hallo ihr lieben


    Ich habe eine Frage

    und zwar möchte ich das meine Progressbar mir den status des kopiervorgangs
    eines batchfiles anzeigt

    zu dem Batch File

    Der batch File Erstellt eine Menge an 0b Dateien und Kopiert sie an einem Anderen ort
    ich habe leider keine ahnung von Progressbar damit habe ich noch nicht viel gearbeitet
    im netz finde ich zwar alles aber nicht das was ich will


    wenn ich mein update Button Klicke soll sich das batchfile im Hintergrund Öffnen
    das passiert auch beim Klicken

    nur habe ich jetzt keine ahnung wie weit der kopiervorgang ist da
    die progressbar ja nicht funktioniert

    wie sollte ich vorgehen das die progressbar den cmd kopiervorgang beobachtet und Feedback gibt?


    PS Einen code kann ich nicht mit einfügen da ich keinen habe :D


    Vielen dank für die infos im Vorraus
    Hallo Redfield

    wieso machst du es umständlich? Lass dir die Dateien doch direkt im Programm erstellen und kopieren anstatt eine Batchdatei dazu zu nutzen.
    Den Fortschritt der Batchdatei einzulesen wird glaube ich deutlich schwerer.
    Wenn du die Dateien in deinem Programm erstellst und kopierst sollte das Anzeigen des Fortschritts in einer Progressbar leicht machbar sein.

    Grüße
    Coder9292
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    @RedfieId Willst Du die Anzahl all Deiner kopierten Dateien angezeigt bekommen
    oder
    soll für jede Datei selbst ein Fortschritt angezeigt werden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo
    Da es sich bei einer Batch Datei um ein gesondert gestartetes Program handel kann VB ja nicht wissen wie weit sein Status mitten im Prozess ist, somit wäre nur möglich beim starten den Progressbar ein Wert vorzugeben und nach Abschluss oder beenden der Batch eine 100% Prozent als wert zu geben. Würde mann auf die Batch verzichten und alles per VB machen so könnte eine Status Anzeige per Prozessbar umsetzen.
    Gruß Stefan

    RodFromGermany schrieb:

    @RedfieId Willst Du die Anzahl all Deiner kopierten Dateien angezeigt bekommen
    oder
    soll für jede Datei selbst ein Fortschritt angezeigt werden?


    Nur den gesammten verlauf


    Stapi schrieb:

    HalloDa es sich bei einer Batch Datei um ein gesondert gestartetes Program handel kann VB ja nicht wissen wie weit sein Status mitten im Prozess ist, somit wäre nur möglich beim starten den Progressbar ein Wert vorzugeben und nach Abschluss oder beenden der Batch eine 100% Prozent als wert zu geben. Würde mann auf die Batch verzichten und alles per VB machen so könnte eine Status Anzeige per Prozessbar umsetzen.Gruß Stefan


    wie mach ich das in VB?
    Wenn du an der Batch festhalten willst musst du anders an die Sache ran gehen. Ich vermute du weißt in welches Verzeichniss die Dateien kopiert werden. Also ermittle wieviel Dateien sich in diesem Verzeichniss befinden und prüfe jede Sekunde wieviele Dateien hinzugekommen sind anhand diesen Wertes kannst du die ProgressBar füllen.
    @Fakiz Mensch auf die Idee wär ich nie im Leben gekommen xD so banal aber trotzdem erfüllt sie den Zweck. :thumbsup: (und nein, dass ist keine ironie)
    Aber ich würde das ganze mit VB machen ohne irgendwelche Zusatzdateien. Schwierig ist's ja allemal nicht.

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Fakiz schrieb:

    Wenn du an der Batch festhalten willst musst du anders an die Sache ran gehen. Ich vermute du weißt in welches Verzeichniss die Dateien kopiert werden. Also ermittle wieviel Dateien sich in diesem Verzeichniss befinden und prüfe jede Sekunde wieviele Dateien hinzugekommen sind anhand diesen Wertes kannst du die ProgressBar füllen.


    wird nicht so leicht gehen da sich die dateien im ordner jedesmal ändern


    angenommen ich würde den anderen weg in erwähnung ziehen
    und die batches abstoßen wie genau sollte ich da vor gehen

    ich müsste diese dateien ja irgendwie können






    Coder9292 schrieb:

    @Fakiz Mensch auf die Idee wär ich nie im Leben gekommen xD so banal aber trotzdem erfüllt sie den Zweck. (und nein, dass ist keine ironie)Aber ich würde das ganze mit VB machen ohne irgendwelche Zusatzdateien. Schwierig ist's ja allemal nicht.Grüße
    och ich find das schon schwer da ich ja garkeine ahnung habe was ich eig. machen sollte ^^das ist schon nen größeres projekt was ich grade mache somit bin ich ja nun auf dinge angewießen womit ich noch garnet gearbeitet habe ^^
    Die Datein musst du nicht kennen, nur den Dateipfad. In einer Variable speicherst du dann die Anzahl an Datein. Dann kannst du ganz einfach ausrechnen wieviel Datein kopiert wurden. Aber das ganze direkt in der Anwedung zu erledigen ist der bessere Weg.

    Fakiz schrieb:

    Die Datein musst du nicht kennen, nur den Dateipfad. In einer Variable speicherst du dann die Anzahl an Datein. Dann kannst du ganz einfach ausrechnen wieviel Datein kopiert wurden. Aber das ganze direkt in der Anwedung zu erledigen ist der bessere Weg.
    okay das verstehe ich nicht ganz wenn ich das ausrechnen muss aber die dateien ändern sich ja ständig es kommen immer welche dazugibts da irgendwo ein tut?
    @RedfieId Ok um dir zu helfen muss ich erstmal ein paar Information von dir bekommen.
    Erläutere doch mal genau was du machen möchtest (Wozu diese Dateien kopieren/erstellen, etc?).
    Und was mich etwas irritiert ist, das du oben geschrieben hast, dass die erstellten Dateien 0b groß sind. Was macht das für einen Sinn??

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Coder9292 schrieb:

    @RedfieId Ok um dir zu helfen muss ich erstmal ein paar Information von dir bekommen.
    Erläutere doch mal genau was du machen möchtest (Wozu diese Dateien kopieren/erstellen, etc?).
    Und was mich etwas irritiert ist, das du oben geschrieben hast, dass die erstellten Dateien 0b groß sind. Was macht das für einen Sinn??

    Grüße


    ja also ich habe 3 ordner im dropbox der geteilt iss

    und die 0b werden von da aus auf c: kopiert für mein programm diese 0b zeigen mir dann in der form an


    die batch machen aber noch mehr z.b kopieren sie das ganze programm auf c: und stellt dies auch ein
    an sich werden gewisse dateien durch die batches hin und her kopiert

    hier mal eines der batch dateien


    @echo off
    echo Backup G_Ordner
    robocopy "C:\Program Files\CFA\data\lists" "A:\Dropbox\Archiv\Upgrade\data\Lists" /e
    Echo Lösche CFA
    del "C:\Program Files\CFA" /s /f /q
    for /D %%a in ("C:\Program Files\CFA\*.*") do rd /q /s "%%a"
    echo Installieren
    Robocopy "A:\Dropbox\Archiv\Version\v1.0" "C:\Program Files\CFA" /e
    Robocopy "A:\Dropbox\Archiv\Upgrade" "C:\Program Files\CFA" /e
    echo Einstellen
    Robocopy "C:\Program Files\CFA\Data\Mp3tag\Chiko\filme" "C:\Program Files\CFA\Mp3tag" /e
    Robocopy "C:\Program Files\CFA\Camtasia\#" "C:\ProgramData\TechSmith" /e
    Robocopy "C:\Program Files\CFA\Data\bat\Chiko" "C:\ProgramData\CFA\Update" /e
    echo Beenden und Starten
    "C:\Program Files\CFA\setup.exe"
    exit
    @RedfieId Also mit dem was du hier schreibst kann ich absolut nichts anfangen :/ Versuche doch mal dich etwas präziser zu fassen.
    Sag mir mal folgende Sachen und zwar so, dass sie Außenständige auch verstehen können.
    1) Was soll das Programm genau machen? Was ist der Nutzen davon? (Bsp.: notepad.exe ist zum verarbeiten von Textdateien)
    2) Dein Programm soll eine Art Backup Tool werden oder?
    3) Von wo nach wo möchtest du welche Dateien kopieren?
    4) Hast du schon irgendwelche Ansätze bzw. hast du Grundkenntnisse von einer Programmiersprache wie VB.NET?

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Coder9292 schrieb:

    @RedfieId Also mit dem was du hier schreibst kann ich absolut nichts anfangen :/ Versuche doch mal dich etwas präziser zu fassen.
    Sag mir mal folgende Sachen und zwar so, dass sie Außenständige auch verstehen können.
    1) Was soll das Programm genau machen? Was ist der Nutzen davon? (Bsp.: notepad.exe ist zum verarbeiten von Textdateien)
    2) Dein Programm soll eine Art Backup Tool werden oder?
    3) Von wo nach wo möchtest du welche Dateien kopieren?
    4) Hast du schon irgendwelche Ansätze bzw. hast du Grundkenntnisse von einer Programmiersprache wie VB.NET?

    Grüße

    okay ich versuchs mal

    1) es soll mit klick auf ein button ein kopiervorgang gestartet werden der genau das macht was in der batch steht der nutzen davon ist das mein programm richtig funktioniert

    2) ja eine backup und gleichzeitiges aktuallisieren
    der gemeinsame ordner wird von dropbox auf c: kopiert (mein programm fungiert auf c:)
    bei einem update wird der ordner wieder auf dropbox zurück geschickt grund dafür ist das alle 3 user so über diesen ordner komunizieren lassen das läuft auch soweit ganz gut

    3) die pfade sind unterschiedlich ich habe z.b dropbox auf einer anderen festplatte die ordner auf dropbox sollen nach c: kopiert werden
    auch das funktioniert top

    ich will ja nur das die progressbar beim update den fortschritt anzeigt z.b wenn eine neue version da ist dauert der kopiervorgang länger als der rest und mit der progressbar soll der fortschritt angezeigt werden sonst denkt man das wohl garnix passiert

    aktuell macht dieser button process.start mit der batch im background das funktioniert auch super

    4) naja grundkenntnisse schon mit dem englisch haberts ich sprech kein wort
    das programmieren mit vb.net hab ich mehr oder weniger von youtube und diesem forum

    es ist einfacher sich was genauer zu erklären laßen als die tuts von Microsoft ^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RedfieId“ ()

    Ok du willst also immer einen Ordner von Dropbox nach C:/ kopieren oder?
    Die Pfade bleiben bei Dropbox sowie C:/ immer gleich oder?
    Falls dies der Fall wäre könntest du wie folgt vorgehen:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub btnKopieren_Click(sender As Object, e As EventArgs) Handles btnKopieren.Click
    4. BackgroundWorkerKopieren.RunWorkerAsync()
    5. End Sub
    6. Private Sub BackgroundWorkerKopieren_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerKopieren.DoWork
    7. If Directory.Exists("Pfad1") Then 'Pfad 1 = der Ordner, der kopiert werden soll
    8. My.Computer.FileSystem.CopyDirectory("Pfad1", "Pfad2") ' Pfad2 = der Pfad, wo der Ordner hinkopiert werden soll z.B. C:/
    9. End If
    10. End Sub
    11. End Class


    Dieser Code ist jetzt erstmal zum Kopieren.
    Wie du denn Fortschritt anzeigen lässt machen wir später.
    Kannst du damit etwas anfangen ??

    *edit* Bitte auch versuchen den Code zu verstehen! Von C&P lernst du schließlich auch nichts. ;)

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Coder9292“ ()

    Coder9292 schrieb:

    Ok du willst also immer einen Ordner von Dropbox nach C:/ kopieren oder?
    Die Pfade bleiben bei Dropbox sowie C:/ immer gleich oder?
    Falls dies der Fall wäre könntest du wie folgt vorgehen:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub btnKopieren_Click(sender As Object, e As EventArgs) Handles btnKopieren.Click
    4. BackgroundWorkerKopieren.RunWorkerAsync()
    5. End Sub
    6. Private Sub BackgroundWorkerKopieren_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerKopieren.DoWork
    7. If Directory.Exists("Pfad1") Then 'Pfad 1 = der Ordner, der kopiert werden soll
    8. My.Computer.FileSystem.CopyDirectory("Pfad1", "Pfad2") ' Pfad2 = der Pfad, wo der Ordner hinkopiert werden soll z.B. C:/
    9. End If
    10. End Sub
    11. End Class


    Dieser Code ist jetzt erstmal zum Kopieren.
    Wie du denn Fortschritt anzeigen lässt machen wir später.
    Kannst du damit etwas anfangen ??

    Grüße


    oh ja denke schon kopiert das teil jetzt? ich würde es mal testen , kann ich mehr als nur 1 pfad nehmen?
    also die ordner in dropbox bleiben so wie sie sind wenn du das meinst


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RedfieId“ ()

    Um das ganze zu nutzen brauchst du natürlichen einen Backgroundworker. Das hinzufügen sollte aber kein Problem sein oder?
    Diesen benutze ich, dass das Programm während des kopierens flüssig weiter läuft.

    Dieser Teil des Codes überprüft ja nur ob der Ordner der kopiert werden soll auch wirklich existiert. (Ist nicht zwingend aber schaden tut es nicht)

    VB.NET-Quellcode

    1. If Directory.Exists("Pfad1") Then
    2. End If​


    Dieser Teil kopiert dann den Ordner aus Pfad1 nach Pfad2. Diese Codezeile kannst du natürlich beliebig oft aufrufen.

    VB.NET-Quellcode

    1. ​ My.Computer.FileSystem.CopyDirectory("Pfad1", "Pfad2")


    Bsp

    VB.NET-Quellcode

    1. ​ My.Computer.FileSystem.CopyDirectory("Pfad1", "Pfad2")
    2. My.Computer.FileSystem.CopyDirectory("Pfad1_2", "Pfad2_2")
    3. My.Computer.FileSystem.CopyDirectory("Pfad1_3", "Pfad2_3")


    Soweit verstanden?
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Coder9292 schrieb:

    Um das ganze zu nutzen brauchst du natürlichen einen Backgroundworker. Das hinzufügen sollte aber kein Problem sein oder?
    Diesen benutze ich, dass das Programm während des kopierens flüssig weiter läuft.

    Dieser Teil des Codes überprüft ja nur ob der Ordner der kopiert werden soll auch wirklich existiert. (Ist nicht zwingend aber schaden tut es nicht)

    VB.NET-Quellcode

    1. If Directory.Exists("Pfad1") Then
    2. End If​


    Dieser Teil kopiert dann den Ordner aus Pfad1 nach Pfad2. Diese Codezeile kannst du natürlich beliebig oft aufrufen.

    VB.NET-Quellcode

    1. ​ My.Computer.FileSystem.CopyDirectory("Pfad1", "Pfad2")


    Bsp

    VB.NET-Quellcode

    1. ​ My.Computer.FileSystem.CopyDirectory("Pfad1", "Pfad2")
    2. My.Computer.FileSystem.CopyDirectory("Pfad1_2", "Pfad2_2")
    3. My.Computer.FileSystem.CopyDirectory("Pfad1_3", "Pfad2_3")


    Soweit verstanden?


    ah danke das war hilfreich und es Funktioniert sicher auch
    ich stelle es mal eben ein und teste es vielen dank dafür
    Pack doch den ganzen Kopiervorgang in ne For Each Schleife. Dann musst du nicht so viel schreiben und die Anzahl der Ordner ist hierbei dann auch dynamisch. Kommt nen Ordner Hinzu, musst du deinen Code nicht erweitern.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen