Ich arbeite gerade an einer Batchdatei, die mir einige Schwierigkeiten bereitet. Ich habe eine generierte CSV-Datei, die eine Kopfzeile und zwei Spalten enthält. Die Datei ist zufällig auch als ASCII kodiert (das zu entdecken war eine echte Offenbarung!). Die zweite Spalte enthält eine Liste von Textdateien, die ich lesen und auf jeden der darin enthaltenen Einträge eine Funktion anwenden muss.
Ich habe darüber nachgedacht, die Dateien mithilfe von „Kopieren“ oder „Typ >>“ zu einer einzigen Datei zusammenzuführen, die leichter zu analysieren wäre, habe jedoch Probleme, den Inhalt der CSV-Datei zu lesen und zu verwenden ...
Bisher verwende ich
for /f "skip=1 usebackq tokens=1-2 delims=," %%a in ("%temp%\list.txt") do echo %%b>>"%temp%\newfile.txt"
aber es funktioniert nicht ... (ich bekomme nur eine leere Datei) und ich weiß einfach nicht, was ich als Nächstes tun soll, um eine Funktion auf alle aufgelisteten Dateien anzuwenden, damit ich dann ihren kombinierten Inhalt verarbeiten kann. Ich kämpfe schon seit zwei Tagen damit und fange an, mich über etwas zu ärgern, das einfach erscheint, aber ich scheine es nicht herauszufinden.
Hier ist der Inhalt meiner CSV-Datei
Kundennummer, Kundenname
44456, James Bond
33356, Doctor Evil
Und ich habe einen Ordner mit Dateien namens James Bond.txt, Mister Rogers.txt, Chief Bob.txt und Doctor Evil.txt, die die Kundeninformationen enthalten. Ich möchte also nur die erforderlichen Namen gemäß der CSV-Datei zusammenstellen und dann die vollständige Liste aller Dateien auf einmal ausdrucken.
Ich hoffe, das klärt die Dinge (ich weiß, es ist schwer zu erklären)
BEARBEITEN: Ich habe den vorgeschlagenen Code ausprobiert, aber er funktioniert immer noch nicht. Ich bekomme nur eine leere Datei, aber aus irgendeinem Grund finde ich, dass er vielversprechend aussieht.
Antwort1
Vorausgesetzt, die Client name
Spalten enthalten gleichnamige Dateien im Ordner mit .txt
der Erweiterung, sollte die folgende Stapelverarbeitung ausreichen.
:: Q:\TEST\2017-05\25\DEMO\SU_1212933.cmd
@Echo off
For %%A in (".\folder") Do Set "folder=%%~fA"
( for /f "skip=1 usebackq tokens=1* delims=," %%a in (
".\list.csv"
) do If Exist "%folder%\%%b.txt" Type "%folder%\%%b.txt"
) >".\Report.txt"
Zur Demonstration ist dies meine Testumgebung
> tree . /F
Q:\TEST\2017-05\25\DEMO
│ SU_1212933.cmd
│ list.csv
│ Report.txt
│
└───folder
James Bond.txt
Doctor Evil.txt
der Inhalt der beiden txt-Dateien infolder
> type folder\*.txt
folder\James Bond.txt
#################################################
## this is file "James Bond.txt" in folder ##
#################################################
folder\Doctor Evil.txt
#################################################
## this is file "Doctor Evil.txt" in folder ##
#################################################
Nach dem Ausführen des Batches enthält die Datei report.txt:
> type Report.txt
#################################################
## this is file "James Bond.txt" in folder ##
#################################################
#################################################
## this is file "Doctor Evil.txt" in folder ##
#################################################