Peter2: Befehl zum Vergleich von Dateien im Netzwerk

Schönen Tag

ich bin HTML-Einsteiger und daher muss man langsam mit mir sprechen ...

Ich hätte gerne eine im lokalen Firmennetzwerk gespeicherte HTML-Datei, die lokale und Netzwerkdateien vergleicht und berichtet und vielleicht auch noch kopiert.

Beispiel:

Firmennetzwerk
\mein_server\meine_freigabe\dateiinfo\dateivergleich.html

In dieser HTML ein Befehl:
Vergleiche die Datei (Dateizeit; ev. Dateigröße) "c:\programme\test\start.exe" mit "\programmserver\test\start.exe"

Wenn die Dateien identisch, dann male einen grünen Haken und schreibe "Alles auf dem aktuellen Stand."
Wenn die Datei auf dem Server neuer, dann male ein rotes Rufzeichen und schreibe "Bitte updaten."

Und das wiederholt sich natürlich mehrfach auf der Seite und muß schön copy&paste tauglich sein ...

Gibt es dazu fertige Beispiele oder simple Downloads?

Wie gesagt sind bei meinem Wissenstand Hinweise wie "du musst in Perl ermitteln, mit Java-xy synchronisieren und mit PHP-Feature 25 ausgeben" vergebliche Liebesmühe ....

Grüße

Peter

  1. Hi,

    Ich hätte gerne eine im lokalen Firmennetzwerk gespeicherte HTML-Datei, die lokale und Netzwerkdateien vergleicht und berichtet und vielleicht auch noch kopiert.

    HTML kann nichts vergleichen,

    In dieser HTML ein Befehl:

    HTML kennt keine Befehle.

    Wie gesagt sind bei meinem Wissenstand Hinweise wie "du musst in Perl ermitteln, mit Java-xy synchronisieren und mit PHP-Feature 25 ausgeben" vergebliche Liebesmühe ....

    Mir irgendeiner Technik, die überhaupt im Stande ist, Dateiinhalte auszulesen und zu vergleichen, wirst du dich aber beschäftigen müssen.

    Wie du dabei den Zugriff auf lokale Dateien und Dateien auf einem anderen Rechner unter einen Hut bekommst, wird auch zu klären sein.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Danke für die drei schnellen und tw. ähnlichen Antworten.

      Hier meine Antworten zu allen drei Beiträgen.

      HTML kann nichts vergleichen,

      HTML kennt keine Befehle.

      Sorry, meine Wortwahl ist da recht "schluddrig". Ich meinte "Funktionen, die in einer HTML-Datei integriert sind und deren Ergebnisse dort auch angezeigt werden".

      ... "Versionsverwaltung Subversion"

      Das erscheint viel zu komplex. Da geht es nur um wenige Dateien, die sich auch nur selten ändern. Es müsste daher ohne Zusatzsoftware mit Bordmitteln gehen.

      Wie du dabei den Zugriff auf lokale Dateien und Dateien auf einem anderen Rechner unter einen Hut bekommst, wird auch zu klären sein.

      Die Rechte selbst sind kein Problem. Der Anwender, der diese Seite startet, hat auf seinem PC alle Rechte und am Server ausreichende Leserechte.

      Mir irgendeiner Technik, die überhaupt im Stande ist, Dateiinhalte auszulesen und zu vergleichen, wirst du dich aber beschäftigen müssen.

      Dateiinhalte selbst nicht, es geht nur ums Dateidatum. Das bekäme ich ja z.B. mit DOS-Befehlen - aber wie ich von von HTML auslöse und die Ergebnisse verarbeite und anzeige weiß ich nicht.

      Das da habe ich schon - wertet Datum aus und schreibt es.

      <script type="text/javascript">  
      var wann=new Date(document.lastModified); //holt Änderung und übersetzt sie ins Datum  
      var monat=wann.getMonth()+1 //liefert Monat  
      var tag=wann.getDate() //liefert Tag  
      var jahr=wann.getFullYear() //liefert Jahr  
      </script>  
      <script type="text/javascript">  
      document.write("Letzte Aktualisierung der Seite: "+tag+"."+monat+"."+jahr);  
      </script>
      

      Wäre das der richtige Ansatz?
      Wenn ja, fehlt noch die Hälfte:

      • betrachte Datei A
      • betrachte Datei B
      • vergleiche die Werte
      • schreibe das Vergleichsergebnis hin

      Klappt das?

      Peter

      1. Nachtrag: Fehlerabfragen

        Wenn ja, fehlt noch die Hälfte:

        • betrachte Datei A (gib Fehlermeldung, wenn nicht vorhanden)
        • betrachte Datei B (gib Fehlermeldung, wenn nicht vorhanden)
        • vergleiche die Werte  (gib Fehlermeldung, wenn nicht möglich)
        • schreibe das Vergleichsergebnis hin und biete entsprechende Auswahlmöglichkeiten
        1. Hallo Peter,

          Nachtrag: Fehlerabfragen

          Wenn ja, fehlt noch die Hälfte:

          • betrachte Datei A (gib Fehlermeldung, wenn nicht vorhanden)
          • betrachte Datei B (gib Fehlermeldung, wenn nicht vorhanden)
          • vergleiche die Werte  (gib Fehlermeldung, wenn nicht möglich)
          • schreibe das Vergleichsergebnis hin und biete entsprechende Auswahlmöglichkeiten

          packen wir das in eine VB-Script-Funktion:

          ' getStatusFile
          ' ---------------------------------------------------------------------------
          ' Übergabe:
          '    localFileName  Zeichenkette, vollständiger Pfad zur lokalen Datei
          '    remoteFileName Zeichenkette, vollständiger Pfad zur Datei auf dem Server
          '    fso            Objekt, gültiges FileSystemObject
          ' ---------------------------------------------------------------------------
          ' Rückgabe:
          '    0          beide Dateien existieren und werden als gleich betrachtet
          '               d.h. haben den gleichen letzten Änderungszeitpunkt
          '    1          lokale Datei existiert nicht
          '    2          auf dem Server gespeicherte Datei existiert nicht
          '    3          beide Dateien existieren nicht
          '    4          lokale Datei ist neuer als auf dem Server gespeicherte
          '    8          lokale Datei ist älter als auf dem Server gespeicherte
          '   -1          ein Fehler ist aufgetreten
          ' ---------------------------------------------------------------------------
          ' Aufgabe:
          '    ermittelt den Status einer bestimmten Datei, die lokal und auf dem
          '    Server gespeichert vorliegen soll.
          ' ---------------------------------------------------------------------------
          Function getStatusFile(localFileName, remoteFileName, fso)
            Dim localFile         ' File-Objekt für die Datei auf dem Arbeitsrechner
            Dim remoteFile        ' File-Objekt für die Datei auf dem Server

          ' Initialisiere den Rückgabewert
            ' In VB-Script heißt die Rückgabevariable genauso wie die Funktion
            getStatusFile = 0

          ' Schalte die Fehlerbehandlung ein
            ' Anmerkung: VB-Script unterstützt nur On Error Resume Next
            '            Uns interessiert nur, ob überhaupt ein Fehler aufgetreten ist.
            '            Daher prüfen wir das Err-Objekt erst am Funktionsende
            On Error Resume Next

          ' Prüfe die Existenz der lokalen Datei
            If Not (fso.FileExists(localFileName)) Then
              getStatusFile = 1
            End If
            ' Prüfe die Existenz der auf dem Server gespeicherten Datei
            If Not (fso.FileExists(remoteFileName)) Then
              getStatusFile = getStatusFile + 2
            End If
            ' Falls eine oder beide Dateien nicht existieren, sind die weiteren
            ' Prüfungen gar nicht möglich
            If (getStatusFile > 0) Then Exit Function

          ' Beide Dateien existieren, prüfe Änderungsdaten
            Set localFile  = fso.GetFile(localFileName)
            Set remoteFile = fso.GetFile(remoteFileName)

          ' Prüfe, welche der Dateien zuletzt geändert wurde
            If (localFile.DateLastModified > remoteFile.DateLastModified) Then
              getStatusFile = 4
            ElseIf (localFile.DateLastModified < remoteFile.DateLastModified) Then
              getStatusFile = 8
            ' Else ist im Prinzip überflüssig, weil der Else-Zweig bedeutet, dass
            ' die Dateien gleichalt sind und die Rückgabevariable derzeit sowieso
            ' genau den diesem Fall entsprechenden Wert besitzt.
            Else
              getStatusFile = 0
            End If

          ' Prüfe, ob ein Fehler aufgetreten ist
            If Err <> 0 Then
              getStatusFile = -1
              Err.Clear
            End If
          End Function

          Testaufruf:

          ' Verglichen wird die Datei
            '     test.txt
            ' im lokalen Verzeichnis
            '     C:\Test\   ' und in der Freigabe
            '     \Server\Freigabe

          Dim fso, file, local, remote, result

          Set fso = CreateObject("Scripting.FileSystemObject")
            file = "test.txt"
            local = "C:\Test"
            remote = "\Server\Freigabe"

          MsgBox getStatusFile(local & file, remote & file, fso)

          Danach:

          - Schreibe das Resultat in ein dafür vorgesehenes Element Deiner HTA,
           - Werte Resultat aus und zeige den Status mit ein paar netten Icons an
           - Erweitern auf eine Dateiliste. Nutze dazu ein Array.
           - Benutzer kann lokales Verzeichnis und Serververzeichnis auswählen,
           - Baue eine "Reparieren"-Schaltfläche ein, die die Reparatur vornimmt,
             falls möglich.
           - ...

          Freundliche Grüße

          Vinzenz

      2. <script type="text/javascript">

        var wann=new Date(document.lastModified); //holt Änderung und übersetzt sie ins Datum
        var monat=wann.getMonth()+1 //liefert Monat
        var tag=wann.getDate() //liefert Tag
        var jahr=wann.getFullYear() //liefert Jahr
        </script>

          
        document ist das momentan vom Browser angezeigte und im Arbeitsspeicher vorhandene Dokument. Die Informationen nutzen dir nichts.  
          
        Jacascript hat prinzipiell keinen Zugriff auf Dateien. Ausnahmen vielleicht beim IE, kenne ich aber nicht genau.  
          
        Woher kommen die Namen der zu vergleichenden Dateien?  
          
        Für eine saubere Lösung musst du dich mit einer serverseitigen Programmiersprache anfreunden. PHP kann z.B. die Dateinamen eines Verzeichnisses und deren Datum und Länge ermitteln. Das Gleiche auf einem anderen Verzeichnis im gleichartigen (Windows?) Netzwerk.  
          
        Und mit PHP erstellst du / ergänzt du eine Webseite, die die gewünschten Informationen anzeigt.  
          
        MfG Gast
        
        1. Hallo,

          Woher kommen die Namen der zu vergleichenden Dateien?

          Das ist eine gute Frage.

          Für eine saubere Lösung musst du dich mit einer serverseitigen Programmiersprache anfreunden.

          im Falle eines Windows-Netzwerkes und dem Wunsch HTML plus in HTML eingebettete Skriptsprache zu verwenden ist das nicht erforderlich. Eine HTA täte es da auch: HTML plus VB-Script oder JScript.

          Der Vorteil liegt vor allem darin, dass es überflüssig ist, einen Webserver zu installieren bzw. auf einen vorhandenen zugreifen zu können.

          Freundliche Grüße

          Vinzenz

          1. Hallo,

            Woher kommen die Namen der zu vergleichenden Dateien?

            Das ist eine gute Frage.

            Die werden nicht dynamisch irgendwo hergeholt; die kann ganz man ganz einfach hardcodieren und alle halbe Jahre anpassen.

            Für eine saubere Lösung musst du dich mit einer serverseitigen Programmiersprache anfreunden.

            im Falle eines Windows-Netzwerkes und dem Wunsch HTML plus in HTML eingebettete Skriptsprache zu verwenden ist das nicht erforderlich. Eine HTA täte es da auch: HTML plus VB-Script oder JScript.

            Der Vorteil liegt vor allem darin, dass es überflüssig ist, einen Webserver zu installieren bzw. auf einen vorhandenen zugreifen zu können.

            Serverseitig liegt nichts drinnen. Die Datei würde einsam auf einer normalen Netzwerk-Dateiablage liegen, ohne daß Dinge wie "Web" oder "Net" überhaupt auftauchen.

            Peter

      3. Hallo,

        Sorry, meine Wortwahl ist da recht "schluddrig". Ich meinte "Funktionen, die in einer HTML-Datei integriert sind und deren Ergebnisse dort auch angezeigt werden".

        schludrige Wortwahl ist eine schlechte Voraussetzung, um zielführende Hilfe zu bekommen, insbesondere wenn man zu Beginn sagt, man sei Anfänger.

        ... "Versionsverwaltung Subversion"

        Das erscheint viel zu komplex. Da geht es nur um wenige Dateien, die sich auch nur selten ändern. Es müsste daher ohne Zusatzsoftware mit Bordmitteln gehen.

        Geht. Gegebenenfalls mit TOCTTOU-Problematik :-)

        Wie du dabei den Zugriff auf lokale Dateien und Dateien auf einem anderen Rechner unter einen Hut bekommst, wird auch zu klären sein.

        Die Rechte selbst sind kein Problem. Der Anwender, der diese Seite startet, hat auf seinem PC alle Rechte und am Server ausreichende Leserechte.

        Javascript hat keinen Zugriff auf lokale Dateien. Daher verwies ich auf HTA. Damit ist das machbar.

        Mir irgendeiner Technik, die überhaupt im Stande ist, Dateiinhalte auszulesen und zu vergleichen, wirst du dich aber beschäftigen müssen.

        Dateiinhalte selbst nicht, es geht nur ums Dateidatum. Das bekäme ich ja z.B. mit DOS-Befehlen - aber wie ich von von HTML auslöse und die Ergebnisse verarbeite und anzeige weiß ich nicht.

        <script type="text/javascript">
        document.write("Letzte Aktualisierung der Seite: "+tag+"."+monat+"."+jahr);
        </script>[/code]
        Wäre das der richtige Ansatz?

        Nein. document.write überschreibt das vorhandene Dokument. Klebe die Informationen z.B. mit innerHTML in die Anwendung oder fülle Formularelemente.

        Wenn ja, fehlt noch die Hälfte:

        • betrachte Datei A
        • betrachte Datei B
        • vergleiche die Werte
        • schreibe das Vergleichsergebnis hin

        Klappt das?

        Wenn die Anwendung die Liste der Dateien führt und die Verzeichnisangaben, wo die Dateien lokal und auf der Freigabe zu finden sind, sollte das mit Hilfe des FileSystemObjects kein großes Problem sein.

        Freundliche Grüße

        Vinzenz

        1. TOCTTOU:
          Zeit sollte hier keine Rolle spielen.

          HTA:
          Muss ich schauen

          Dateisystem:
          Windows (am PC und am Server)

          Formulare, InnerHTML:
          Muss ich schauen

          FileSystemObjects:
          Muss ich auch schauen.

          Danke für die Hinweise.
          Die Sache scheint jedenfalls mit 10 Zeilen Codefragment hier und 15 Zeilen Copy-Paste da nicht zu laufen.

          Peter

      4. Hallo,

        auch wenn du deine Aufgabenstellung noch einmal besser formulierst, bleiben die zwei Feststellungen unverändert bestehen:

        HTML kann nichts vergleichen,
        HTML kennt keine Befehle.

        Sorry, meine Wortwahl ist da recht "schluddrig". Ich meinte "Funktionen, die in einer HTML-Datei integriert sind und deren Ergebnisse dort auch angezeigt werden".

        Die gibt es nicht. Punkt.
        Logische Abläufe, also im weiteren Sinn Programme, kannst du mit Javascript realisieren, das in ein HTML-Dokument eingebettet wird.

        Wie du dabei den Zugriff auf lokale Dateien und Dateien auf einem anderen Rechner unter einen Hut bekommst, wird auch zu klären sein.
        Die Rechte selbst sind kein Problem. Der Anwender, der diese Seite startet, hat auf seinem PC alle Rechte und am Server ausreichende Leserechte.

        Das hast du missverstanden. Es geht darum, dass Javascript konzeptbedingt keinen Zugriff auf Daten und Objekte außerhalb des Browsers oder der Browser/Server-Verbindung hat.

        Mir irgendeiner Technik, die überhaupt im Stande ist, Dateiinhalte auszulesen und zu vergleichen, wirst du dich aber beschäftigen müssen.
        Dateiinhalte selbst nicht, es geht nur ums Dateidatum.

        Das spielt keine Rolle, du kommst einfach nicht dran.

        Das bekäme ich ja z.B. mit DOS-Befehlen - aber wie ich von von HTML auslöse und die Ergebnisse verarbeite und anzeige weiß ich nicht.

        Wohl kaum DOS, das verwendet seit 10..15 Jahren wohl niemand mehr. Du meinst vermutlich die Windows-Konsole. Aber das Problem bleibt: Du kannst mit HTML oder auch Javascript keine externen Programme oder Kommandos ausführen.

        Das da habe ich schon - wertet Datum aus und schreibt es.

        <script type="text/javascript">

        var wann=new Date(document.lastModified); //holt Änderung und übersetzt sie ins Datum

        
        > Wäre das der richtige Ansatz?  
          
        Nein. Damit bekommst du nur das Änderungsdatum des HTML-Dokuments, in dem dieses Javascript läuft.  
          
        Du brauchst zwingend irgendeine Methode, mit der du auf Dateien zugreifen kannst. Das könnte ein speziell für euch geschriebenes kleines Programm sein, oder auch eine serverseitige Scriptsprache wie PHP oder Perl.  
        HTML und Javascript können es jedenfalls nicht.  
          
        So long,  
         Martin  
        
        -- 
        Alleine sind wir stark ...  
        gemeinsam sind wir unausstehlich!  
          
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        
      5. Hi!

        ... "Versionsverwaltung Subversion"

        Das erscheint viel zu komplex. Da geht es nur um wenige Dateien, die sich auch nur selten ändern. Es müsste daher ohne Zusatzsoftware mit Bordmitteln gehen.

        Dein Vorhaben ließe sich damit unkompliziert und zu 100% umsetzen. Alle Bemühungen, solche Funktionalität nachzubauen ist wesentlich komplexer. Dass das Thema mit HTML&Co. nichts zu tun hat, hast Du ja bereits mehrfach gelesen.

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. Hi!

    Vergleiche die Datei (Dateizeit; ev. Dateigröße) "c:\programme\test\start.exe" mit "\programmserver\test\start.exe"

    Wenn die Dateien identisch, dann male einen grünen Haken und schreibe "Alles auf dem aktuellen Stand."
    Wenn die Datei auf dem Server neuer, dann male ein rotes Rufzeichen und schreibe "Bitte updaten."

    Du suchst offenbar ein System zur Versionskontrolle wie Subversion.

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Antwort siehe hier:
      http://forum.de.selfhtml.org/?t=202224&m=1365524

      Peter

  3. Hallo Peter,

    ich bin HTML-Einsteiger und daher muss man langsam mit mir sprechen ...

    zu Deiner Information: HTML ist *keine* Programmiersprache ...

    Ich hätte gerne eine im lokalen Firmennetzwerk gespeicherte HTML-Datei, die lokale und Netzwerkdateien vergleicht und berichtet und vielleicht auch noch kopiert.

    ... und deswegen ist es mit HTML *allein* völlig unmöglich ein solches Vorhaben umzusetzen. IE-Only im Zusammenspiel mit JScript wäre etwas machbar, typischerweise als HTA.

    Deine weitere Beschreibung läßt mich vermuten, dass Du eine Software zur Versionsverwaltung wie z.B. Subversion suchst.

    Freundliche Grüße

    Vinzenz

    1. Antwort siehe hier:
      http://forum.de.selfhtml.org/?t=202224&m=1365524

      Peter