dissi-xd
Goto Top

Mit findstr PDFs mit exaktem String kopieren

Hi,

bei der Arbeit müssen wir einmal im Monat aus einem Ordner mit ca. 10000 PDFs ungefähr 400-500 PDFs heraussuchen. Pro Kunde sind 2 PDFs im Ordner enthalten:
1. *-Persönlicher Report.pdf
2. *-Rechnung.pdf
Wir sollen nur die Rechnung herauskopieren.

Bevor ich kam, wurde dies in 3-4 Stunden händisch gemacht. Als ich das das erste Mal machen musste, dachte ich mir schon, dass man das automatisieren kann und muss. 10 Minuten geoogelt, auf dieser Seite gelandet und ein Skript gefunden, welches ich nur noch anpassen musste und schon wurde alles automatisch gemacht.

Das Problem jetzt ist: Ich habe eine src.txt Datei mit den Kundennummern, welche kopiert werden sollen. Diese wird durch Batch eingespielt und anschließend im PDF-Namen diese Nummer gesucht. Bloß wenn ich z.B. Kundennummer 2345 brauche, kopiert es mir auch die 12345, da der String "2345" auch in diesem enthalten ist. Wie kann ich das Skript modifizieren, damit es nach dem exakten String sucht? Ich bin kein Profi, wir hatten nur mal nebenbei etwas Batch in der Schule gelernt, deshalb wäre es sehr nice, wenn ihr mir ungefähr schreiben könntet, wie ich das zu machen habe bzw. mit welchen Befehlen. Am besten wäre natürlich, wenn ihr mir den Code frisch hinschreiben könntet ;D

Bis jetzt sieht mein Skript so aus:

@echo off &setlocal
chcp 1252

set "sourceList=C:\Users\name\Desktop\test\src.txt"  
set "sourceRoot=I:\Name\Abrechnungen NEU\Monat\PDFs"  
set "destFolder=C:\Users\name\Desktop\test\KP"  
set "month=10"   
set "year=2021"  

set /A counter=0

for /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*_%year%-%month%-Rechnung.pdf"^|findstr /ig:"%sourceList%"') do (  

	copy "%%~i" "%destFolder%\"  
	set /A counter=counter+1
)

@echo 
echo.
echo Es wurden %counter% PDF's nach %destFolder% kopiert.  
echo.

PAUSE

Ich habe recherchiert und gesehen, dass man anscheinend mit \< vor und >\ nach dem Suchbegriff der exakte Suchbegriff gesucht wird. Nur wenn ich schreibe:
...findstr /ig:"\<%sourceList%\>"') do (...  
kommt nur ein Fehler: FINDSTR: Zeichenfolgen aus \<C:\Users\name\Desktop\test\src.txt\> k”nnen nicht gelesen werden.

Ich habe schon ein bisschen herumprobiert, aber nichts zustande bekommen. Ich habe z.B. gewollt die scr.txt, die erste Zeile auslesen, diese in %temp% speichern, anschließend etwas wie:
...findstr /ig:"\<%temp%\>"') do (...  
machen und dann wird die nächste Zeile ausgelesen und es wiederholt sich, bis alles ausgelesen wurde. Nur klappte dies nicht so richtig...

Habt ihr vielleicht eine Idee?

Vielen Dank,
Dissi-xD

Content-ID: 1572116313

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

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

rubberman
Lösung rubberman 30.11.2021 aktualisiert um 19:00:22 Uhr
Goto Top
FINDSTR /?
...
/X Gibt Zeilen aus, die vollkommen übereinstimmen.
...

Ist es das was du suchst? (In Kombination findstr /xig:"%sourceList%")
Logischerweise kannst du \<...\> nicht um den PFAD DER LISTE setzen face-wink Das wäre auch nicht ansatzweise das worauf abzielst.

Steffen

/ EDIT Nope. Nach nochmaligem Durchlesen wird das nicht funktionieren. Du müsstest in deiner Liste bereits die Kundennummern mit nachgestelltem Unterstrich haben, dann könntest du mit Option /B arbeiten. Aber auch nur wenn du vorher in den Suchordner wechselst, sodass du in der Ausgabe keinen Pfad vor den Dateinamen hast. Also nicht wirklich was das mit Batch noch sinnvoll umzusetzen ist. PowerShell?

/ EDIT2 Komplett anderer Ansatz
for /f "usebackq delims=" %%i in ("%sourceList%") do (  
  copy "%sourceRoot%\%%i_%year%-%month%-Rechnung.pdf" "%destFolder%\" && set /a "counter+=1"  
)
Dissi-xD
Dissi-xD 01.12.2021 um 07:52:06 Uhr
Goto Top
Edit 2 hat geklappt, vielen Dank :D