Batch: for + dir + findstr
Hallo zusammen,
ich hab mal wieder ein 'ernstes' Problem, bei dem ich nicht wirklich weiter weiß und das Internet nicht so recht eine Lösung parat hat.
Folgendes habe ich vor:
- in einem Verzeichnis liegen Dateien (z.B. 20141029.100000.000; 20141029.110000.000; usw.)
- welche ich mittels DIR-Befehl pro Schleife einlesen will
- in der Exclude-Datei stehen bereits einige dieser Dateien (pro Zeile ein Eintrag)
- nun sollen mir aber nur jene als Variable zur Verfügung stehen, die eben nicht in der Exclude-Datei stehen, deshalb sage ich findstr ignoriere diese
Im weiteren Schritten werden jene aussortiert, die nicht älter als 8h alt sind. Im Script wird am Ende der FOR-Schleife die jeweilige Datei in die Exclude-Datei mittels ECHO geschrieben, damit im nächsten Lauf nur noch die nicht bereits verarbeiteten verarbeitet werden.
Ich hoffe ich konnte es einigermaßen vernünftig erklären.
Codeschnipsel:
Dateien im Ordner:
Exclude-Datei "temp.txt": (die "20141029.100000.000" steht öfter drin, da ja die verarbeiteten in diese Datei geschrieben werden, da aber findstr diese nicht ignoriert, wird diese
Zum Problem:
Leider funktioniert diese Schleife nur "zur Hälfte". Lass ich diese durchlaufen, müsste er mir nur die "20141029.170000.000" Datei anzeigen, da diese nicht in der temp.txt drin steht. Es wird jedoch folgendes ausgegeben:
Würde mir bitte jemand verraten wo mein Denkfehler ist und ob diese Schleife generell funktionieren würde? Ich verzweifel schon
Euch vorab schon mal vielen Dank für jede Idee!
Gruß
Tobias
ich hab mal wieder ein 'ernstes' Problem, bei dem ich nicht wirklich weiter weiß und das Internet nicht so recht eine Lösung parat hat.
Folgendes habe ich vor:
- in einem Verzeichnis liegen Dateien (z.B. 20141029.100000.000; 20141029.110000.000; usw.)
- welche ich mittels DIR-Befehl pro Schleife einlesen will
- in der Exclude-Datei stehen bereits einige dieser Dateien (pro Zeile ein Eintrag)
- nun sollen mir aber nur jene als Variable zur Verfügung stehen, die eben nicht in der Exclude-Datei stehen, deshalb sage ich findstr ignoriere diese
Im weiteren Schritten werden jene aussortiert, die nicht älter als 8h alt sind. Im Script wird am Ende der FOR-Schleife die jeweilige Datei in die Exclude-Datei mittels ECHO geschrieben, damit im nächsten Lauf nur noch die nicht bereits verarbeiteten verarbeitet werden.
Ich hoffe ich konnte es einigermaßen vernünftig erklären.
Codeschnipsel:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set "file_path=\\server\log"
set "exclude=c:\temp.txt
for /f %%a in ('dir /b /a-d "%file_path%" ^| findstr /v /g:%exclude%') do (
echo %%a
)
Dateien im Ordner:
20141025.060000.000
20141026.210000.000
20141027.150000.000
20141028.030000.000
20141029.100000.000
20141029.170000.000
Exclude-Datei "temp.txt": (die "20141029.100000.000" steht öfter drin, da ja die verarbeiteten in diese Datei geschrieben werden, da aber findstr diese nicht ignoriert, wird diese
20141025.060000.000
20141026.210000.000
20141027.150000.000
20141028.030000.000
20141029.100000.000
20141029.100000.000
20141029.100000.000
20141029.100000.000
Zum Problem:
Leider funktioniert diese Schleife nur "zur Hälfte". Lass ich diese durchlaufen, müsste er mir nur die "20141029.170000.000" Datei anzeigen, da diese nicht in der temp.txt drin steht. Es wird jedoch folgendes ausgegeben:
20141029.100000.000
20141029.170000.000
Würde mir bitte jemand verraten wo mein Denkfehler ist und ob diese Schleife generell funktionieren würde? Ich verzweifel schon
Euch vorab schon mal vielen Dank für jede Idee!
Gruß
Tobias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 253445
Url: https://administrator.de/contentid/253445
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Tobias.
Nur die Zeilen mit 20141029.100000.000 in deiner Exclude-Datei haben einige angehängte Leerzeichen, die offensichtlich mit verglichen werden. Ergo hast du einen Fehler bei der Erzeugung dieser Datei.
In Zeile 5 fehlt übrigens das schließende Anführungszeichen, was aber wohl nichts mit deinem Problem zu tun hat.
Grüße
rubberman
Nur die Zeilen mit 20141029.100000.000 in deiner Exclude-Datei haben einige angehängte Leerzeichen, die offensichtlich mit verglichen werden. Ergo hast du einen Fehler bei der Erzeugung dieser Datei.
In Zeile 5 fehlt übrigens das schließende Anführungszeichen, was aber wohl nichts mit deinem Problem zu tun hat.
Grüße
rubberman