.sessl
Goto Top

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:
@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 face-sad

Euch vorab schon mal vielen Dank für jede Idee!


Gruß
Tobias

Content-ID: 253445

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

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

rubberman
Lösung rubberman 30.10.2014 aktualisiert um 22:47:18 Uhr
Goto Top
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
.Sessl
.Sessl 30.10.2014 um 22:47:10 Uhr
Goto Top
Oh nein .. was ein Leerzeichen alles anrichten kann!
Dein Adlerauge hat mich gerettet, vielen Dank!

Das fehlende Anführungszeichnen in Zeile 5 fehlt glücklicherweise nur hier ..

Vielen Dank für die schnelle und sehr hilfreiche Antwort.


Gruß
Tobias