doppellhelix
Goto Top

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.

::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.

Content-ID: 302163

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

Ausgedruckt am: 15.11.2024 um 23:11 Uhr

MrCount
MrCount 18.04.2016 um 09:40:59 Uhr
Goto Top
Hallo Doppelhelix,

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
)
Biber
Biber 18.04.2016, aktualisiert am 19.04.2016 um 15:29:54 Uhr
Goto Top
Moin Doppelhelix,

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
Doppellhelix
Doppellhelix 18.04.2016 um 13:44:04 Uhr
Goto Top
Vielen Dank für eure Hilfe,

@Biber,
das war die Lösung noch nicht.
Es kommt die Meldung: Das Sprungziel - Eine Datei wurde nicht gefunden.

So sieht der Code mitlerweile aus (habe die Speicherorte der Dateien angepasst)


::Dateiinhalt anpassen
@echo off & SETLOCAL

SET "suchzeichen=|"  
SET "ersetzungszeichen=;"  

For /f "usebackq" %%i in (`dir "d:\Import_Solar\GBLH\min*.txt" /b`) do call :eineDatei %%i  
goto :eof

:eine Datei
SET "datei=d:\Import_Solar\GBLH %1"  
SET "ausgabe=d:\Import_Solar\GBLH\fertig %1"  
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

Es kann wohl mit dem Dateinamen nichts angefangen werden (min*.txt).

Meine Dateien heißen z.B. min150101.txt
Also min (Jahr15, Monat01, Tag01).txt

Gruß Helix
Biber
Biber 18.04.2016 aktualisiert um 14:07:18 Uhr
Goto Top
Moin Doppelhelix,

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 face-wink

Grüße
Biber
Doppellhelix
Doppellhelix 19.04.2016 um 10:11:10 Uhr
Goto Top
face-smile

Das hat fast geklappt.
Aber irgendwie ist jetzt alles durcheinander.

Ich fang mal am Besten von vorne an.

Im Ordner d:/import_Solar liegen mehrere Dateien, deren Dateinamen so ausieht:
min150101.txt
min150102.txt

Der Inhalt der Datrei ist immer folgendermaßen aufgebau, nur die Werte und Datum/Zeit ändert sich:
m[mi++]="14.04.16 20:25:00|0;8;1;48747;504;232"  
m[mi++]="14.04.16 20:20:00|0;28;3;48747;571;247"  
m[mi++]="14.04.16 20:15:00|2;48;8;48747;536;217"  
m[mi++]="14.04.16 20:10:00|35;66;10;48747;545;226"  
m[mi++]="14.04.16 20:05:00|67;92;13;48744;570;226"  
m[mi++]="14.04.16 20:00:00|103;122;17;48738;571;234"  
m[mi++]="14.04.16 19:55:00|139;156;23;48729;574;236"  
m[mi++]="14.04.16 19:50:00|187;200;27;48718;588;243"  
m[mi++]="14.04.16 19:45:00|244;245;34;48702;595;241"  
m[mi++]="14.04.16 19:40:00|405;382;52;48681;612;243"  
m[mi++]="14.04.16 19:35:00|596;550;76;48647;625;253"  

Die Batchdatei soll die Dateien öffnen und anschließend den Inhalt so ändern, daß es folgendermaßen aussieht:

GBLH_Datum;GBLH_Uhrzeit;GBLH_ACLeistung;GBLH_DCLeistung;unbekannt;GBLH_ACTagesertrag;GBLH_DCSpannung;GBLH_WRTemperatur
19.04.16;09:55:00;1621;1490;202;1314;679;278
19.04.16;09:50:00;942;880;118;1180;661;269
19.04.16;09:45:00;413;397;51;1103;628;254
19.04.16;09:40:00;278;280;38;1069;616;246
19.04.16;09:35:00;316;316;43;1046;617;246
19.04.16;09:30:00;389;377;51;1019;625;252
19.04.16;09:25:00;454;431;58;987;631;252

Außerdem soll die fertig umgewandwelte Datei dann im Ordner D:\import_Solar\fertig abgespeichert werden. Von mir aus auch unter dem gleichen Dateinamen.

Als ich die Batchdatei eben ausgeführt hatte, ist folgendes passiert:
Das Batchfesnter öffnete sich mit dem Hinweis:
FINDSTR: d:\import_Solar min150101.txt kann nicht geöffnet werden
FINDSTR: d:\import_Solar min150102.txt kann nicht geöffnet werden
FINDSTR: d:\import_Solar min150103.txt kann nicht geöffnet werden

Der Dateiname wurde nicht in den Ordner fertig verschoben, sondern der Dateinamen hat sich geändert in:
fertig min150101.txt

Der Inhalt der Datei bestand anschließend nur aus der Überschrift:
GBLH_Datum;GBLH_Uhrzeit;GBLH_ACLeistung;GBLH_DCLeistung;unbekannt;GBLH_ACTagesertrag;GBLH_DCSpannung;GBLH_WRTemperatur


Sorry, daß ich nerve. Aber ich mache gerade die ersten Schritte mit Batch, interessiert mich auch total. Aber ersten fehlt mir noch der Blick auf das Wesentliche und ich steh etwas unter Zeitnot.

Also nochmal danke für deine Hilfe.

Gruß Helix
Biber
Biber 19.04.2016 aktualisiert um 15:29:32 Uhr
Goto Top
Moin Doppelhelix,

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
Doppellhelix
Doppellhelix 19.04.2016 um 15:23:50 Uhr
Goto Top
Das wars.

Ich danke dir vielmals.