Frage

Ich versuche, eine Liste von Dateien mit einer Kontrolldatei anhand ihres geänderten Zeitstempels zu vergleichen

dir /b /tw /od controlfile olderfile | more +1

Dies sollte das zurückgeben controlfile als Änderungsdatum am olderfile ist früher als controlfile.Allerdings scheint es einen Vergleich zum Erstellungsdatum zu geben (olderfileDas Erstellungsdatum liegt danach controlfile's) und wird daher immer wiederkommen olderfile.Der /tw Schalter sollte es sagen dir das letzte geschriebene Datum verwenden (von dir /?), also bin ich mir nicht sicher, was ich falsch mache, wenn ich möchte, dass /tw wie dokumentiert funktioniert?

:AKTUALISIEREN:

Bisher hatte ich olderfile in einem Unterordner relativ zu controlfile.Als ich kopiert habe olderfile in das gleiche Verzeichnis wie controlfile der Vergleich hat wie erwartet funktioniert - d.h.Der obige Befehl wurde zurückgegeben controlfile.Wenn Sie sich also in einem Unterordner befinden, wird der Vergleich offensichtlich unterbrochen (selbst wenn das Änderungsdatum des Unterordners mit dem von übereinstimmt). olderfileist selbst früher als das von controlfile).

Meine Frage lautet nun: Wie kann ich dieses Problem umgehen, da die Verzeichnisstruktur erforderlich ist?

War es hilfreich?

Lösung

Zunächst eine Erklärung, warum Ihr Code fehlschlägt.

Wenn Sie DIR ohne die Option /B betrachten, wird der Dateipfad immer als Kopfzeile angezeigt, niemals zusammen mit dem Dateinamen.Wenn Sie die Sortieroption zusammen mit zwei Dateispezifikationen innerhalb desselben Verzeichnisses verwenden, ist der Befehl in der Lage, die Dateien zu sortieren und sie unter derselben Verzeichnisüberschrift anzuzeigen.Selbst wenn der Dateiname wiederholt wird, wissen Sie genau, auf welche Datei sich der Header bezieht.

Wenn sich die beiden Dateispezifikationen jedoch in unterschiedlichen Pfaden befinden, besteht die Möglichkeit, dass der Dateiname derselbe ist und sich nur die Pfade unterscheiden.In diesem Fall nützt die Sortierung nichts, es sei denn, jede Dateispezifikation wird unter ihrem eigenen Header sortiert.andernfalls könnte man nicht erkennen, um welche Datei es sich handelt.Es macht wenig Sinn, eine einzelne Datei zu sortieren, aber denken Sie daran, dass die Dateispezifikation Platzhalter enthalten könnte, also macht es Sinn.Wenn also die Sortieroption mit mehreren Dateispezifikationen kombiniert wird, die unterschiedliche Pfade verwenden, führt DIR für jeden Pfad eine separate Sortierung durch, jeder mit seinem eigenen Header.

Durch das Hinzufügen der Option /B werden die Pfadheader entfernt, das Sortierverhalten wird dadurch jedoch nicht geändert!Absolut ein albernes und nutzloses Design, aber genau das bekommt man.

Eine Lösung zu finden ist weitaus problematischer, insbesondere wenn Sie reine Batch-Lösungen mit nur nativen Windows-Befehlen verwenden möchten.Die Arbeit mit Datumsangaben kann bei Batch-Vorgängen nervig sein.

Die zweckmäßigste Batch-Lösung, die mir einfallen kann, besteht darin, die zweite Datei vorübergehend in das übergeordnete Verzeichnis zu kopieren, den Vergleich im übergeordneten Verzeichnis durchzuführen und dann die temporäre Kopie zu löschen.Dies könnte jedoch ein Problem sein, wenn die Datei groß ist.Außerdem wird davon ausgegangen, dass der Dateiname nicht bereits im übergeordneten Verzeichnis vorhanden ist.Wenn sie existiert (oder existieren könnte), können Sie die Datei unter einen anderen Namen kopieren, der bekanntermaßen eindeutig ist.Natürlich müsste man das Ergebnis dann übersetzen.

Soweit ich das beurteilen kann, muss bei jeder anderen Batch-Lösung das Datum und die Uhrzeit analysiert werden.Das öffnet eine ganze Büchse voller Würmer.(Es ist machbar)

Wenn der COPY-Vorschlag nicht akzeptabel ist (ich würde es Ihnen nicht verübeln, wenn Sie sich entscheiden, ihn nicht zu verwenden), dann empfehle ich die Verwendung von etwas anderem als Batch, vielleicht VBScript, Javascript oder Powershell.Oder vielleicht ein hybrider Ansatz wie Batch mit etwas VBScript.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top