Dateinamen auslesen und in einer Schleife benutzen
Hallo Experten,
ich kämpfe derzeit mit folgender Aufgabenstellung, welche ich per Batchskript lösen möchte:
In einem Ordner sind 1 bis n csv-Dateien. Die erste Spalte der Dateiinhalte möchte ich absteigend sortieren und dann die ersten drei Zeilen in eine separate Datei schreiben.
Bei meinem Fall geht es um Messwerte in diesen Dateien und ich möchte immer nur die drei höchsten Messwerte aus einer Datei in eine zentrale Datei schreiben.
Teile der o.g. Aufgabe konnte ich schon lösen bzw. habe abgeschrieben
, aber ich bekomme die Variable mit den Dateinamen nicht in eine Schleife eingebaut.
1. Teil Dateinamen auslesen
2. Teil Sortieren
3. Teil Erste Zeile auslesen (die Zeilennummer kann angepasst warden)
Für einen Durchlauf funktioniert es, aber ich bekomme es nicht in einer Gesamtscheife mit mehreren Quelldateien hin. Für ein paar Tipps wäre ich sehr dankbar.
Viele Grüße
TB
ich kämpfe derzeit mit folgender Aufgabenstellung, welche ich per Batchskript lösen möchte:
In einem Ordner sind 1 bis n csv-Dateien. Die erste Spalte der Dateiinhalte möchte ich absteigend sortieren und dann die ersten drei Zeilen in eine separate Datei schreiben.
Bei meinem Fall geht es um Messwerte in diesen Dateien und ich möchte immer nur die drei höchsten Messwerte aus einer Datei in eine zentrale Datei schreiben.
Teile der o.g. Aufgabe konnte ich schon lösen bzw. habe abgeschrieben
1. Teil Dateinamen auslesen
for /f "delims==" %%f in ('dir /b "Pfad\*.csv"') do set Dateiname=%%~nxf
sort /R Pfad\%Dateiname% /o Pfad\tmp.txt
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "Pfad\tmp.txt"') do ((if "%%a"=="1" set line=%%b)
echo.%line% > Messwerte.txt
Viele Grüße
TB
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 334144
Url: https://administrator.de/forum/dateinamen-auslesen-und-in-einer-schleife-benutzen-334144.html
Ausgedruckt am: 18.05.2025 um 03:05 Uhr
12 Kommentare
Neuester Kommentar

Hallo, geht viel effektiver mit etwas PS in deiner Batch:
hauruck
@echo off
set "csvordner=D:\Daten"
set "spaltenname=NameSpalte1"
set "zieldatei=D:\result.csv"
powershell -Executionpolicy Bypass -Command "dir '%csvordner%' -Filter *.csv | %%{Import-CSV $_.Fullname -Delimiter ';' | sort {[decimal]$_.'%spaltenname%'.trim()} -Descending | select -First 3} | export-csv '%zieldatei%' -Delimiter ';' -NoType -Encoding UTF8"
Hallo,
so spontan würde ich sagen, daß dir einfach nur ein Klammerpaar fehlt:
for /f "delims==" %%f in ('dir /b "Pfad\*.csv"') do (
set Dateiname=%%~nxf
sort /R Pfad\%Dateiname% /o Pfad\tmp.txt
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "Pfad\tmp.txt"') do (if "%%a"=="1" set line=%%b)
echo.%line% > Messwerte.txt
)
(Ungetestet)
Alles, was nach do in Klammern steht, wird als zur betreffenden Zeile gehörig betrachtet. So kann man nach do auch mehrere Befehle ausführen lassen. Die öffnende Klammer muss dabei in der gleichen Zeile wie der For-Befehl stehen.
Gruß
Apophis
so spontan würde ich sagen, daß dir einfach nur ein Klammerpaar fehlt:
for /f "delims==" %%f in ('dir /b "Pfad\*.csv"') do (
set Dateiname=%%~nxf
sort /R Pfad\%Dateiname% /o Pfad\tmp.txt
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "Pfad\tmp.txt"') do (if "%%a"=="1" set line=%%b)
echo.%line% > Messwerte.txt
)
(Ungetestet)
Alles, was nach do in Klammern steht, wird als zur betreffenden Zeile gehörig betrachtet. So kann man nach do auch mehrere Befehle ausführen lassen. Die öffnende Klammer muss dabei in der gleichen Zeile wie der For-Befehl stehen.
Gruß
Apophis
Hallo,
der Dateiname wird wahrscheinlich nicht übergeben, weil erst zur Laufzeit bekannt und nicht zum Zeitpunkt der Interpretation der Zeile. Dann probiere mal den Befehl
Setlocal EnableDelayedExpansion
vor der ersten FOR-Schleife. Der sorgt dafür, das jede Variable erst dann expandiert wird, wenn sie angesprochen wird.
Gruß
Apophis
der Dateiname wird wahrscheinlich nicht übergeben, weil erst zur Laufzeit bekannt und nicht zum Zeitpunkt der Interpretation der Zeile. Dann probiere mal den Befehl
Setlocal EnableDelayedExpansion
vor der ersten FOR-Schleife. Der sorgt dafür, das jede Variable erst dann expandiert wird, wenn sie angesprochen wird.
Gruß
Apophis

Es funktioniert aber, nur erfolgt die Sortierung nicht numerisch.
Es weis ja niemand hier wie die Daten aussehen, habe es oben entsprechend ergänzt wenn es Zahlen im Format 99,99 sind.
Hallo,
guckst Du hier:
leerzeichen am anfang und ende einer batch Variablen entfernen (trim in php)
Gruß
Apophis
guckst Du hier:
leerzeichen am anfang und ende einer batch Variablen entfernen (trim in php)
Gruß
Apophis

s. Anpassung oben.