Batch: mit "dir" Befehl das neuste Lese- und Änderungsdatum auslesen
Hallo,
bin grad dabei ein Batch Skript zu schreiben komme aber nicht mehr weiter. Es hört sich für mich sehr kompliziert an. Ich versuche es mal in Worten zu fassen.
wenn ich den 'Dir' Befehl benutze und ein Pfad angebe bekomme ich auf der linken Seite das Datum raus. In der ersten Zeile steht immer das Hauptverzeichnis. Das lese ich zurzeit in mein Batch Skript aus.
Nun habe ich gemerkt, dass wenn ich in Unterverzeichnis oder z.B. in Unter-Unterordner etwas ändere wird mir trotzdem ein altes Datum angezeigt weil ich nicht selbst in Ordner eine Datei lese sondern im Unterordner.
Gibt es einen Befehl mit dem ich anhand einer For Schleife das neuste Datum rauslesen kann egal ob es im Hauptverzeichnis liegt oder in einem Unterordner? Damit will ich feststellen wann zuletzt in dem Ordner was geändert wurde oder ob auf ein txt Datei die im Unterordner liegt zugegriffen wurde.
Ich hoffe ihr habts verstanden was ich meine und könnt mir weiterhelfen.
Viele Grüße
BatchAnfaenger91
bin grad dabei ein Batch Skript zu schreiben komme aber nicht mehr weiter. Es hört sich für mich sehr kompliziert an. Ich versuche es mal in Worten zu fassen.
wenn ich den 'Dir' Befehl benutze und ein Pfad angebe bekomme ich auf der linken Seite das Datum raus. In der ersten Zeile steht immer das Hauptverzeichnis. Das lese ich zurzeit in mein Batch Skript aus.
Nun habe ich gemerkt, dass wenn ich in Unterverzeichnis oder z.B. in Unter-Unterordner etwas ändere wird mir trotzdem ein altes Datum angezeigt weil ich nicht selbst in Ordner eine Datei lese sondern im Unterordner.
Gibt es einen Befehl mit dem ich anhand einer For Schleife das neuste Datum rauslesen kann egal ob es im Hauptverzeichnis liegt oder in einem Unterordner? Damit will ich feststellen wann zuletzt in dem Ordner was geändert wurde oder ob auf ein txt Datei die im Unterordner liegt zugegriffen wurde.
Ich hoffe ihr habts verstanden was ich meine und könnt mir weiterhelfen.
Viele Grüße
BatchAnfaenger91
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 283067
Url: https://administrator.de/forum/batch-mit-dir-befehl-das-neuste-lese-und-aenderungsdatum-auslesen-283067.html
Ausgedruckt am: 10.01.2025 um 11:01 Uhr
11 Kommentare
Neuester Kommentar
@echo off
set "ordner=C:\test"
for %%r in ("%ordner%\.") do (
for /f "tokens=3,*" %%a in ('robocopy "%%~fr." "%%~fr." /l /nocopy /s /is /njh /njs /ndl /nc /ns /ts ^| sort /r ^| findstr /n "^" ^| findstr /l /b /c:"1:"') do set "latest=%%~tb"
)
echo %latest%
btw. geht sowas heutzutage wesentlich eleganter und in Echtzeit mit FileSystemWatchern etc. oder auch Eventlog und NTFS Überwachungseinträgen. Selbst mit Robocopy geht sowas in Echtzeit, und das alles mit Benachrichtigung ...
Suche eine Batch,Tool oder Programm zum umbenennen von Dateien
PDFs aus Ordner-Verzeichnis automatisch per Mail versenden
VBA - VBS : Umbennen und Verschieben von Dateien in Loop
Kann ich nicht bestätigen macht hier überall was es soll ... da musst du es falsch angepasst haben.
Ansonsten macht es das was du beschrieben hast. Bitte beachte das auf einem System das LastAccess Date deaktiviert sein kann, dann erhältst du falsche Werte wenn du nach LastAccess sortierst. Gerade bei Systemen mit SSDs wird das gerne deaktiviert.
Ansonsten macht es das was du beschrieben hast. Bitte beachte das auf einem System das LastAccess Date deaktiviert sein kann, dann erhältst du falsche Werte wenn du nach LastAccess sortierst. Gerade bei Systemen mit SSDs wird das gerne deaktiviert.
Ach so, habs oben angepasst...
Gruß jodel32
Gruß jodel32
an was kann das liegen?
Erstens weil in der Liste der Shares meist auch Shares wie Druckershares dabei sein können, die keinen "richtigen" Pfad enthalten können (du musst diese also ausfiltern) und zweitens weil der Pfad mit einem Backslash endet den du hier in Zeile 3 doppelt hast. Drittens weil du kein delayedexpansion nutzt was du brauchst wenn du Variablen innerhalb einer FOR-Schleife definierst und darauf zugreifst.@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f "skip=2 tokens=1,2,3* delims=," %%k in ('wmic share where ^(Type^=2147483648^) get Name^,Path /format:csv') DO @(
for %%r in ("%%m.") do (
for /f "tokens=3,*" %%a in ('robocopy "%%~fr." "%%~fr." /l /nocopy /s /is /njh /njs /ndl /nc /ns /ts ^| sort /r ^| findstr /n "^" ^| findstr /l /b /c:"1:"') do set "latest=%%~tb"
)
echo Share: "%%l" # Last change: "!latest!"
)
Zitat von @BatchAnfaenger91:
ich habe alles verstanden bis auf paar:
was bedeutet bzw. was macht %%~fr und %%~tb ?
Geb mal for /? in einer Konsole ein, ganz unten stehen die Erklärungen, das erste macht aus dem Dateinamen einen vollqualifizierten Pfad und das letzte expandiert zum Änderungsdatum der Dateiich habe alles verstanden bis auf paar:
was bedeutet bzw. was macht %%~fr und %%~tb ?
Gruß jodel32