106245
Goto Top

Dateiänderung seit letzten Aufruf auflisten

Hallo liebe Community,

ich möchte gerne eine Batch-Datei schreiben. Sie soll bei Aufruf aus einer anderen Datei das letzte Aktualisierungsdatum finden, danach in einem Verzeichnis alle Dateien finden, die neuer als das Datum sind und ihren Pfad in einer neuen Datei schreiben.

Bisher habe ich das zusammengebastelt:

adata.txt = Alle Dateien mit Unterverzeichnis
dit.txt = Ausgabedatei mit den neuen Dateien (Pfad)
ae.txt = Datei mit dem Änderungsdatum

rem 1. Liste Verzeichnis auf...
del adata.txt
dir /s /b /o-d /tw >> adata.txt

rem 2. Schreibe alle Dateien mit neueren Änderungsdatum in eine Datei...
del dir.txt
for /f "delims=" %%i in (adata.txt) do ??? >> dir.txt

rem 3. Setze auf aktuelles Datum
rem ???
pause

Und dort, wo ??? steht, wüsste ich nicht weiter... könnt ihr mir helfen? Oder geht das überhaupt so, wie ich das oben versuche?

Content-Key: 183433

Url: https://administrator.de/contentid/183433

Printed on: April 26, 2024 at 12:04 o'clock

Member: mathe172
mathe172 Apr 12, 2012 at 14:34:04 (UTC)
Goto Top
Hallo,

auf was genau soll geachtet werden? Nur Datum? Auch Zeit? Neuer oder auch gleich alt?
Als einen ersten Ansatz vielleicht mal folgendes:
REM Datum im Format JJJJMMTT
set "Vergleich=20120123"  
for /f "tokens=1-6* delims=.: " %%A in ('dir /a-d') do (  
if "%%C%%B%%A" GTR "%Vergleich%" echo.%%G  
)
pause
(ungetestet)

MfG,
Mathe172
P.S.:Bitte Code-Formatierung benutzen!
Mitglied: 106009
106009 Apr 12, 2012 at 15:32:19 (UTC)
Goto Top
Hi,

Zitat von @106245:
ich möchte gerne eine Batch-Datei schreiben. Sie soll bei Aufruf aus einer anderen Datei das letzte Aktualisierungsdatum
finden,

Alles noch nie dagewesen, nach Verarbeiten von Dateien nach Datum hat hier noch nie jemand gefragt......

Vorschlag: An deiner Stelle würde ich mal die Suchfunktion des Forums nutzen, dann würdest du feststellen, dass dieses Thema in ähnlicher Form fast jede Woche umassend bearbeitet ´wird.
.
Gruß
.
Mitglied: 106245
106245 Apr 12, 2012 at 17:19:33 (UTC)
Goto Top
Hi,

Zitat von @106009:
Verarbeiten von Dateien nach Datum hat hier noch nie jemand gefragt......

Vorschlag: An deiner Stelle würde ich mal die Suchfunktion des Forums nutzen, dan würdest du feststellen, dass dieses
Thema in ähnlicher Form fast jede Woche umassend bearbeitet ´wird.

Dann gib mal "Verarbeiten von Dateien nach Datum" in die Suchfunktion ein
Raus kommen 11 Fragen, wovon mir keine Antwort hilft...
Ich habe auch schon mit anderen Suchbegriffen hier gesucht und auch mit Google gesucht. Und da ich keine befriedigende Antwort gefunden hatte, habe ich hier geschrieben. Wenn dieses Thema immer wieder bearbeitet wird, dann hättest du mir auch gleich die Links zu den Threads schreiben können...


@mathe172: Notfalls nur mit Datum, aber beides überprüfen wäre am Besten. Gleich alt würde nicht dazugehören. Sonst zählt sich die ae.txt mit rein.
Zu dem Code: Also das hatte ich auch als erstes gedacht, aber mein Problem ist, die vollständige Ansicht des Befehls "dir" wäre bei mir ungefähr so:

Datentr„ger in Laufwerk E: ist Volume
 Volumeseriennummer: 400C-C7B6

 Verzeichnis von E:\Ordner

12.04.2012  18:58    <DIR>          .
12.04.2012  18:58    <DIR>          ..
12.04.2012  18:44               342 act.bat
12.04.2012  18:44             2.166 adata.txt
12.04.2012  14:27             3.900 changelog.htm
12.04.2012  18:58                14 dir.bat
12.04.2012  18:45                 0 dir.txt
...
              10 Datei(en)         15.012 Bytes
               4 Verzeichnis(se), 12.542.431.232 Bytes frei

Damit fallen also ungültige Zeilen an... Wenn ich es ungeändert durchlaufen lasse, habe ich dann das:

 (leere Zeile)
act.bat 
166 adata.txt 
900 changelog.htm 
dir.txt 
...

Kann man nicht das Datum einer einzelnen Datei überprüfen? Ohne diese nervigen Zeilen, sondern nur die relevanten Daten?

Und zu 3. habe ich die Lösung (durch suchen
) gefunden:
echo %DATE% %TIME% >> ae.txt
Mitglied: 106009
106009 Apr 12, 2012 at 17:53:01 (UTC)
Goto Top
Dann gib mal "Verarbeiten von Dateien nach Datum" in die Suchfunktion ein^^
Raus kommen 11 Fragen, wovon mir keine Antwort hilft...
Was kann ich denn dafür, dass du offenbar nicht in der Lage bist, eine Suchanfrage vernüftig abzusetzen?
Wenn ich in der erweiterten Suche "Datum" eingebe und alle Bereiche durchsuchen lasse, bekomme ich über 2000 Treffer, und wenn ich das nur im passenden Berech suchen lasse, ~560 passende Fragen, 13 Anleitungen, 8 Tipps und über 660 Kommentare. Und da ist nichts Passendes für dich dabeì?

Tut mir leid, aber wenn ich solchen Antworten bekomme, sinkt meine Bereitschaft zur Hilfe auf 0. Mir ist meine Zeit zu schade, Leute, die nicht bereit sind, sich selbst Mühe zu geben, nur zu bedienen, zumal das Thema hier im Forum schon bis zum Erbrechen durchgekaut wurde.
.
Member: mathe172
mathe172 Apr 12, 2012 at 18:19:28 (UTC)
Goto Top
Hallo,

um die ersten Zeilen zu überspringen(sorry, hab ich in meinem Code vergessen) geht mit "skip=5" in den Parameter von For
Und die Zeit lässt sich mit einem zweiten if vergleichen
Also:
REM Datum im Format JJJJMMTT
set "VergleichDatum=20120123"  
REM Format HHMM
set "VergleichZeit=0923"  
for /f "skip=6 tokens=1-6* delims=.: " %%A in ('dir /a-d') do (  
if "%%C%%B%%A" GTR "%VergleichDatum%" if "%%E%%D" GTR "%VergleichZeit%" echo.%%G  
)
pause

MfG,
Mathe172
Mitglied: 106245
106245 Apr 13, 2012 at 10:38:46 (UTC)
Goto Top
Hi,

@106009: Wenn deine Hilfsbereitschaft schon auf null ist und dir die Zeit zu schade ist, warum hast du schon 2 Posts gemacht, die nicht zur Lösung meines Problems beitragen? Und wie willst du genau wissen, ob ich mir keine Mühe gebe?

@mathe172
Danke, ich habe das jetzt so:

@echo on

@echo Liste alle Dateien auf (relativer Pfad)...
if EXIST adata.txt del adata.txt
for /f "tokens=6* delims=\" %%i in ('dir /s /b /o-d /tw') do @echo \%%j>> adata.txt  

@echo Überprüfe alle Dateien nach Datum...
set VergleichDatum =< date.txt
set VergleichZeit =< time.txt
for /f "skip=6 tokens=1-6* delims=.: " %%A in ('dir /a-d /-c') do (   
if "%%C%%B%%A" GTR "%VergleichDatum%" if "%%E%%D" GTR "%VergleichZeit%" echo.%%G >> ae_temp.txt  
)

@echo Füge relativen Pfad hinzu...
if EXIST ae.txt del ae.txt
for /f "delims=" %%S in (ae_temp.txt) do findstr %%S adata.txt >> ae.txt  

@echo Aktualisiere Zeit...
set CURRENTTIME=%TIME:~0,2%%TIME:~3,2%
@echo %CURRENTTIME% > time.txt
set ARCHIVNAME=%DATE:~6,6%%DATE:~3,2%%DATE:~0,2%
@echo %ARCHIVNAME% > date.txt

pause

Jetzt habe ich da nur noch eine Frage...
Ich habe jetzt noch Unterverzeichnisse, von denen ich auch gerne noch die Aktualität überprüfen möchte. Dazu hatte ich mir jetzt gedacht, ich modifiziere die For-Schleife indem ich ein /s zu dem dir hinzufüge, in einer weiteren for-Schleife dann die leeren Zeilen entferne und mir danach die gesamte Zeile aus der Auflistungs-Datei hole. Das wäre bei mir so:
...
for /f "skip=6 tokens=1-6* delims=.: " %%A in ('dir /a-d /-c') do (   
if "%%C%%B%%A" GTR "%VergleichDatum%" if "%%E%%D" GTR "%VergleichZeit%" echo.%%G >> ae_mit_leerzeichen.txt  
)

for /F %%S in (ae_mit_leerzeichen.txt) do (
 echo %%S >> ae_ohne_pfad.txt
)

if EXIST ae.txt del ae.txt
for /f "delims=" %%S in (ae_ohne_pfad.txt) do findstr %%S adata.txt >> ae.txt  

del ae_ohne_pfad.txt
del ae_mit_leerzeichen.txt

Dummerweise gibt das jetzt sämtliche Einträge aus. Meine Fehlersuche brachte eventuell das:
set /p VergleichDatum =< date.txt
@echo "%VergleichDatum%"  
Ausgabe ist: "" und nicht das eingegebene Datum. Ich habe es auch mit set VergleichDatum = "20120412" ausprobiert und die Ausgabe ist immer noch "".
Liegt es vielleicht daran? Warum gibt es die Variable nicht richtig aus?
Mitglied: 106009
106009 Apr 13, 2012 at 12:13:20 (UTC)
Goto Top
Zitat von @106245:
@106009: Wenn deine Hilfsbereitschaft schon auf null ist und dir die Zeit zu schade ist, warum hast du schon 2 Posts gemacht,
die nicht zur Lösung meines Problems beitragen? Und wie willst du genau wissen, ob ich mir keine Mühe gebe?

Du bist selbst zu dämlich zu erkennen, dass auch in meinen Antworten Informationen enthalten waren, die dir sehr wohl bei der Lösung deines "Problems" hätten helfen können.
Was soll's: Der geistige Horizont ist eben bei einigen Leuten der Abstand zwischen Kopf und Brett.

EOD
Mitglied: 106245
106245 Apr 13, 2012 at 12:29:34 (UTC)
Goto Top
Mir reichts. Ich hole mir die Antwort von einem anderen Forum.