In Batchdatei mehrere Dateien auswählen
Hallo,
ich habe eine Batchdatei, die mir innerhalb einer Logdatei (txt), die Zeilen neu formatiert.
Dieses Script funktioniert hervorragend.
Durch einen Fehler, hab ich jetzt ca. 300 dieser Dateien. Der Dateiname ist immer anders, fängt aber mit min*.txt an. Z.b. min150101.txt
Ich möchte jetzt meine Batchdatei anschubsen, daß sie sich jede einzelne Datei vornimmt, die Änderung macht und dann neu in einem anderen Ordner abspeichert.
Was muß ich in meinem Code ändern?
Versuche mit min*.txt, Sternchen als Platzhalter, funktionieren nicht.
Der Fehler wird wohl in Zeile 4 und 5 liegen.
Vielen Dank für die Hilfe.
ich habe eine Batchdatei, die mir innerhalb einer Logdatei (txt), die Zeilen neu formatiert.
Dieses Script funktioniert hervorragend.
Durch einen Fehler, hab ich jetzt ca. 300 dieser Dateien. Der Dateiname ist immer anders, fängt aber mit min*.txt an. Z.b. min150101.txt
Ich möchte jetzt meine Batchdatei anschubsen, daß sie sich jede einzelne Datei vornimmt, die Änderung macht und dann neu in einem anderen Ordner abspeichert.
Was muß ich in meinem Code ändern?
Versuche mit min*.txt, Sternchen als Platzhalter, funktionieren nicht.
Der Fehler wird wohl in Zeile 4 und 5 liegen.
::Dateiinhalt anpassen
@echo off & SETLOCAL
SET "datei=d:\Import_Solar\min*.txt"
SET "ausgabe=d:\Import_Solar\Test\min*.txt"
SET "suchzeichen=|"
SET "ersetzungszeichen=;"
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
>"%ausgabe%" echo GBLH_Datum;GBLH_Uhrzeit;GBLH_ACLeistung;GBLH_DCLeistung;unbekannt;GBLH_ACTagesertrag;GBLH_DCSpannung;GBLH_WRTemperatur
REM Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "tokens=1* delims==" %%i IN ('FINDSTR . "%datei%"') DO (
set "zeile=%%~j"
call :ersetzen
)
goto :eof
:ersetzen
call set "zeile=%%zeile:%suchzeichen%=%ersetzungszeichen%%%"
>>"%ausgabe%" echo %zeile: =;%
goto :eof
Vielen Dank für die Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 302163
Url: https://administrator.de/contentid/302163
Ausgedruckt am: 15.11.2024 um 23:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Doppelhelix,
da dürfte dir folgendes helfen:
http://ss64.com/nt/for2.html
z.B.:
da dürfte dir folgendes helfen:
http://ss64.com/nt/for2.html
z.B.:
For %%G IN (d:\Import_Solar\min*.txt) do (
REM hier dein Code, was mit der Datei %%G gemacht werden soll
)
Moin Doppelhelix,
passe die ersten Zeilen deines Schnipsels so an:
Grüße
Biber
passe die ersten Zeilen deines Schnipsels so an:
::Dateiinhalt anpassen
@echo off & SETLOCAL
SET "suchzeichen=|"
SET "ersetzungszeichen=;"
For /f "usebackq" %%i in (`dir "d:\Import_Solar\min*.txt" /b`) do call :eineDatei %%i
goto :eof
:eine Datei
SET "datei=d:\Import_Solar\%1"
SET "ausgabe=d:\Import_Solar\Test\%1"
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
....{ der Rest wie oben }
....
Grüße
Biber
Moin Doppelhelix,
meine Schuld....
ich schreibe in Zeile 07
Die Sprungmarke in Zeile 10 nenne ich aber "
Das sieht zwar viel ästhetischer aus, wird aber nie gesucht.... umgekehrt wir "eineDatei" natürlich nie gefunden, wie du auch bemerkt hast.
Bitte nimm in deiner Zeile 10 auch das -in diesem Falle - dämliche Leerzeichen raus. ( =
Mach ich in meinem Code oben nich, ich stehe zu meinen Tippfehlern
Grüße
Biber
meine Schuld....
ich schreibe in Zeile 07
... do call :eineDatei %%i
, rufe also die Sprungmarke "eineDatei".Die Sprungmarke in Zeile 10 nenne ich aber "
eine Datei
".Das sieht zwar viel ästhetischer aus, wird aber nie gesucht.... umgekehrt wir "eineDatei" natürlich nie gefunden, wie du auch bemerkt hast.
Bitte nimm in deiner Zeile 10 auch das -in diesem Falle - dämliche Leerzeichen raus. ( =
:eineDatei
)Mach ich in meinem Code oben nich, ich stehe zu meinen Tippfehlern
Grüße
Biber
Moin Doppelhelix,
bin leider auch grad etwas im Stress, deshalb nur kurz:
in deinem Schnipsel in Zeile 11/12 steht
Da ist jeweils das Leerzeichen zwischen dem Pfad und dem %1 (dem Dateinamen) durch einen Backslash zu ersetzen.
Momentan dürfte herauskommen:
Bitte ändere auf
Grüße
Biber
bin leider auch grad etwas im Stress, deshalb nur kurz:
in deinem Schnipsel in Zeile 11/12 steht
...
SET "datei=d:\Import_Solar\GBLH %1"
SET "ausgabe=d:\Import_Solar\GBLH\fertig %1"
...
Da ist jeweils das Leerzeichen zwischen dem Pfad und dem %1 (dem Dateinamen) durch einen Backslash zu ersetzen.
Momentan dürfte herauskommen:
...
REM wenn Dateiname %1 nun min_123456.txt wäre
....
SET "datei=d:\Import_Solar\GBLH %1"
REM Ergebnis:
REM Variable %Datei%=d:\Import_Solar\GBLH min_123456.txt" --> und die findet FindStr nicht!
...
Bitte ändere auf
...
SET "datei=d:\Import_Solar\GBLH\%1"
SET "ausgabe=d:\Import_Solar\GBLH\fertig\%1"
...
Grüße
Biber