Ich möchte gerne nur mit einem Teil-Ergebnis von findstr weiterarbeiten
Hallo allerseits!
Ich habe in einem Verzeichnis eine große Zahl zip-Dateien, in denen jeweils viele txt-Dateien liegen.
Die Text-Dateien enthalten im Dateinamen einen Schlüssel.
Dateien mit demselben Schlüssel können sich in beliebig vielen zip-Dateien befinden, d.h. pro zip kommt der Schlüssel 0, 1 oder mehrmals vor.
Nun muss ich manchmal alle Dateien eines bestimmten Schlüssels entpacken um sie zu untersuchen.
Dazu habe ich ein Batch, das alle zips durchsucht und die Dateien des angegebenen Schlüssels entpackt:
set /p var="Schlüssel eingeben: "
for %%f in (.\*.zip) do .\_unzip.exe -o %%f %var%* -d .\Zielordner
Leider wird mir als Arbeitsauftrag aber oft ein alternativer Schlüssel mitgeteilt, sodass ich erst in einer Mappingdatei den eigentlichen Schlüssel nachschlagen muss.
Der alternative Schlüssel besteht nur aus Buchstaben, der eigentliche Schlüssel ist immer 5-stellig
altern eigent
ABC 12345
ABCD 54321
XYZ 45698
XYZABC 25849
Nun dachte ich, ich könnte diesen Lookup in der batch einbauen - wobei er nur vorgenommen werden muss, wenn das erste Zeichen des eingegebenen Schlüssels keine Zahl ist:
set /p var="Schlüssel eingeben: "
IF "%var:~0,1%" GEQ "0" IF "%var:~0,1%" LEQ "9" (
for %%f in (.\*.zip) do .\_unzip.exe -o %%f %var%* -d .\Zielordner
) else (
und hier scheitere ich gerade...
)
Ich kann mit findstr nach dem alternativen Schlüssel suchen, bekomme aber evtl. mehrere Zeilen zurück, z.B. in diesem Fall:
findstr /R "^%var%.*" Datei.txt > findstr.txt
ABC 12345
ABCD 54321
Ich brauche als Ergebnis nur die letzten 5 Zeichen der ersten Zeile (wenn denn mehrere vorliegen).
Das Schreiben in die Datei findstr.txt sollte natürlich nur eine Krücke zum Debuggen sein, weil ich nicht weiter gekommen bin habe ich aber auch versucht, die Datei nach dem Schreiben wieder einzulesen, aber selbst das funktioniert nicht, dabei wäre der Rest der Verarbeitung wieder klar...
Set /p blablup=<findstr.txt
set eigent=%blablup:~-5%
echo !eigent!
for %%f in (.\*.zip) do .\_unzip.exe -o %%f !eigent!* -d .\Zielordner
(hier offensichtlich mit SETLOCAL EnableDelayedExpansion)
Hier also meine Frage: Wie komme ich an die letzten 5 Zeichen der ersten Zeile?
Danke, Olaf
Ich habe in einem Verzeichnis eine große Zahl zip-Dateien, in denen jeweils viele txt-Dateien liegen.
Die Text-Dateien enthalten im Dateinamen einen Schlüssel.
Dateien mit demselben Schlüssel können sich in beliebig vielen zip-Dateien befinden, d.h. pro zip kommt der Schlüssel 0, 1 oder mehrmals vor.
Nun muss ich manchmal alle Dateien eines bestimmten Schlüssels entpacken um sie zu untersuchen.
Dazu habe ich ein Batch, das alle zips durchsucht und die Dateien des angegebenen Schlüssels entpackt:
set /p var="Schlüssel eingeben: "
for %%f in (.\*.zip) do .\_unzip.exe -o %%f %var%* -d .\Zielordner
Leider wird mir als Arbeitsauftrag aber oft ein alternativer Schlüssel mitgeteilt, sodass ich erst in einer Mappingdatei den eigentlichen Schlüssel nachschlagen muss.
Der alternative Schlüssel besteht nur aus Buchstaben, der eigentliche Schlüssel ist immer 5-stellig
altern eigent
ABC 12345
ABCD 54321
XYZ 45698
XYZABC 25849
Nun dachte ich, ich könnte diesen Lookup in der batch einbauen - wobei er nur vorgenommen werden muss, wenn das erste Zeichen des eingegebenen Schlüssels keine Zahl ist:
set /p var="Schlüssel eingeben: "
IF "%var:~0,1%" GEQ "0" IF "%var:~0,1%" LEQ "9" (
for %%f in (.\*.zip) do .\_unzip.exe -o %%f %var%* -d .\Zielordner
) else (
und hier scheitere ich gerade...
)
Ich kann mit findstr nach dem alternativen Schlüssel suchen, bekomme aber evtl. mehrere Zeilen zurück, z.B. in diesem Fall:
findstr /R "^%var%.*" Datei.txt > findstr.txt
ABC 12345
ABCD 54321
Ich brauche als Ergebnis nur die letzten 5 Zeichen der ersten Zeile (wenn denn mehrere vorliegen).
Das Schreiben in die Datei findstr.txt sollte natürlich nur eine Krücke zum Debuggen sein, weil ich nicht weiter gekommen bin habe ich aber auch versucht, die Datei nach dem Schreiben wieder einzulesen, aber selbst das funktioniert nicht, dabei wäre der Rest der Verarbeitung wieder klar...
Set /p blablup=<findstr.txt
set eigent=%blablup:~-5%
echo !eigent!
for %%f in (.\*.zip) do .\_unzip.exe -o %%f !eigent!* -d .\Zielordner
(hier offensichtlich mit SETLOCAL EnableDelayedExpansion)
Hier also meine Frage: Wie komme ich an die letzten 5 Zeichen der ersten Zeile?
Danke, Olaf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 361143
Url: https://administrator.de/contentid/361143
Ausgedruckt am: 26.11.2024 um 14:11 Uhr
5 Kommentare
Neuester Kommentar