Dateinamen mittels findstr aus einer TXT auslesehen
Guten Tag zusammen,
ich möchte gerne mit einer Batch mehrere Dateinamen z.B.
Frank.pdf
Jutta.pdf
Ingold.pdf
Käthe.pdf
welche in einem Text vorkommen und in einer Textdatei abgespeichert sind auslesen. Die ausgelesenen Dateinamen+Typ (Frank.pdf, Jutta.pdf...) sollen durch das Skript dann in einer anderen Textdatei aufgelistet werden. Dabei ist es auch Wichtig, das Umlaute mit übernommen werden.
Anbei mein derzeitiges Script, welches noch fehlerhaft bzw. unvollständig ist:
Könnte mir bitte jemand weiterhelfen?
Danke!
ich möchte gerne mit einer Batch mehrere Dateinamen z.B.
Frank.pdf
Jutta.pdf
Ingold.pdf
Käthe.pdf
welche in einem Text vorkommen und in einer Textdatei abgespeichert sind auslesen. Die ausgelesenen Dateinamen+Typ (Frank.pdf, Jutta.pdf...) sollen durch das Skript dann in einer anderen Textdatei aufgelistet werden. Dabei ist es auch Wichtig, das Umlaute mit übernommen werden.
Anbei mein derzeitiges Script, welches noch fehlerhaft bzw. unvollständig ist:
chcp 1252
set "SrcDir=D:\tmp\"
set "FileType=txt"
set "SearchKey1=pdf"
REM set "SearchKey2=bloblo"
set "LogFile=D:\tmp\liste.log"
(for %%f in ("%SrcDir%\*.%FileType%") do (
REM type "%%~f" | findstr /r /c:"^%SearchKey1%.*%SearchKey2%$" > NUL && (
type "%%~f" | findstr /r /c:"^%SearchKey1%$" > NUL && (
echo %%~nf
)
)) > "%LogFile%"
REM Hier soll der in der Eingabeaufforderung angezeigte Text in einer log.txt geschrieben werden.
>> "D:\tmp\log.txt"
Könnte mir bitte jemand weiterhelfen?
Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 340189
Url: https://administrator.de/contentid/340189
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
14 Kommentare
Neuester Kommentar
Sowas macht man doch heutzutage nicht mehr per Batch
Powershell oneliner:
Die Batch-Sachen dazu findest du hier zu tausenden bereits im Forum...
Gruß
Powershell oneliner:
select-string -Path "D:\tmp\*.txt" -Pattern 'BlaBla.*?\.pdf' | select -Expand Line | sc "Ergebnis.txt" -Encoding UTF8
Die Batch-Sachen dazu findest du hier zu tausenden bereits im Forum...
Gruß
Ja, schreib stattdessen einfach
z.B.
select -Expand Line
Desweiteren übernimmt er die die Umlaute nicht richtig:
�
Dann musst du das Encoding der Dateien bei Select-String explizit mit angeben denn dann kann die Powershell das Encoding deiner Quelldateien nicht ermitteln (kein BOM), und das Ausgabeencoding natürlich nach Wunsch angeben...�
z.B.
select-string -Path "D:\tmp\*.txt" -Pattern 'BlaBla.*?\.pdf' -Encoding Default | select -Expand Line | sc "Ergebnis.txt" -Encoding UTF8
Zitat von @Diamond72:
mit Expand kann ich bestimmt auch noch das Dokument= wegschneiden oder?
BlaBla.*?\.pdf
Was macht das .*?\
Klarmit Expand kann ich bestimmt auch noch das Dokument= wegschneiden oder?
BlaBla.*?\.pdf
Was macht das .*?\
(select-string -Path "D:\tmp\*.txt" -Pattern 'BlaBla.*?\.pdf' -Encoding Default | select -Expand Line) -replace 'Dokument=','' | sc "Ergebnis.txt" -Encoding UTF8
Ach ja, sorry vergessen ...
Sag mal kennst du eine gute Seite, wo ich viel bzgl. PowerShell und deren Funktionen nachlesen kann?
In der MS Doku natürlich und z.B. hier
Könntest du zwar direkt oben mit einer For-Each-Schleife an die Pipe pappen aber über die Textdatei gehts natürlich auch wenn du das unbedingt über diesen Umweg willst. In der Powershell musst du umdenken, da geht alles ohne lästiges schreiben in irgendwelche Textdatei-Zwischenpuffer, da es im Gegensatz zu Batch objektorientiert arbeitet.
%{} ist die Abkürzung für eine For-Schleife in Powershell und $_ enthält dann den Inhalt der jeweiligen Zeile der Textdatei.
gc 'D:\tmp\Ergebnis.txt' | %{
xcopy "D:\tmp\Dokumente\$_*" "D:\tmp\PDF\$_*"
}
Zitat von @Diamond72:
Kann es sein, dass Get-Content nur eine bestimmte größe zwischenspeichern kann?
Nein.Kann es sein, dass Get-Content nur eine bestimmte größe zwischenspeichern kann?
Er kopiert nicht alle PDF Dokumente aus der ergebnis.txt
Leerzeichen & Co oder sonst was ...Wir können es nicht sehen.
Jip, aber die doppelten Slashes solltest du vermeiden :-P. Du hast am Ende der Variablen einen und zusätzlich im String einen ...