Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

mehrere txt Dateien aber nur von der ersten Datei die erste Zeile auslesen

Frage Entwicklung Batch & Shell

Mitglied: 46933

46933 (Level 1)

03.05.2007, aktualisiert 08.05.2007, 5682 Aufrufe, 25 Kommentare

Halli Hallo alle zusammen.

ich hab eine Batch-Datei die mir mehrere txt Dateien ausliest.
Besser gesagt, Zeilen die mit einer bestimmten Zahl anfangen.
Diese Zeilen werden alle in eine neue txt Datei geschrieben.
Diese enthält dann halt nur die Zeilen, welche mit der bestimmten Zahl anfangen.
Soweit so gut.
Jetzt soll aber diese Datei auch noch eine Zeile mit Spaltenüberschriften beinhalten. (die fertige Datei wird nämlich nach Access verknüpft)
Die batch-Datei müßte nun eine Zeile auslesen und diese als erste Zeile in die richtige Datei schreiben.
Aber nur einmal.
Das Problem besteht darin das meine batch-Datei mir diese Zeile aus allen vorhandenen txt Dateien ausliest und diese dann in die richtige Datei schreibt.
Ich brauch sie aber nur einmal.

for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[Standortname]" %Pfad2%\*.txt') do @echo %%i >> fertig\Gesamt.txt

mit diesem Befehl habe ich versucht es zu realisieren.
Er liest mir alle Zeilen die mit Standortname beginnen aus und schreibt sie in Gesamt.txt.
Ich brauch diese Zeile aber nur einmal.
Kann mir jemand helfen?

Gruß gini
Mitglied: bastla
03.05.2007 um 12:06 Uhr
Hallo ginivpj!

Dazu könntest Du einfach eine "Schalter"-Variable verwenden, etwa so:
01.
@echo off & setlocal 
02.
set Geschrieben= 
03.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[Standortname]" %Pfad2%\*.txt') do if not defined Geschrieben echo %%i >> fertig\Gesamt.txt & set Geschrieben=True
Nur beim ersten "for"-Durchlauf existiert die Variable Geschrieben noch nicht, daher wird einmal in die Textdatei geschrieben. Welchen Wert Du danach der Variablen gibst, ist eigentlich egal, es genügt, dass sie gesetzt wird.

Grüße
bastla
Bitte warten ..
Mitglied: 46933
03.05.2007 um 12:30 Uhr
set Geschrieben=
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[Standortname]" %Pfad2%\*.txt') do if not defined Geschrieben echo %%i >> fertig\Gesamt.txt & set "Geschrieben=True"

hab ich so eingeschrieben.
Komischerweise gibt er mir jetzt in der ersten Zeile ein H aus!
Keine Ahnung wo das her kommt???
Aber nicht die Zeile wo der Standortname steht.
Das tokens=3 hab ich auch raus genommen.
Bitte warten ..
Mitglied: bastla
03.05.2007 um 12:51 Uhr
Hallo ginivpj!

Der Fehler ist für mich nicht nachvollziehbar, da sich an der bisherigen Funktionalität ja nichts verändert haben sollte - es wird nur das "echo" vom "if not defined" abhängig gemacht.
BTW: Wozu eigentlich der Schalter /R im "findstr" - damit suchst Du eigentlich nach allen einzelnen zwischen "[" und "]" stehenden Zeichen ...

Wenn Du nur Zeilen mit "Standortname" am Anfang finden willst, müsste doch
01.
findstr /B "Standortname" %Pfad2%\*.txt
genügen.

Grüße
bastla
Bitte warten ..
Mitglied: 46933
03.05.2007 um 13:24 Uhr
Ja, hast Recht. Hab ich korrigiert.
Ich stelle mal ein paar Dateien ein wie es so aussieht.

erste.txt
01.
Region Ost 
02.
PB Berlin 
03.
Standortname	Fehler	                11	22	33	40	63 202210011A	Lücke Muss (60)	01.02.01	30.08.01	21.08.01	05.08.02	02.10.02	 
04.
202210034A	Lücke Muss (60)	15.03.04	15.03.04	24.10.02		28.11.02 202210035A	Lücke Muss (60)	15.03.04	15.03.04	05.11.04		07.05.03	 
05.
PB Leipzig 
06.
Standortname	Fehler	                11	22	33	40	63 202210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04		10.01.05	 
07.
Region Süd 
08.
PB München 
09.
Standortname	Fehler	                11	22	33	40	63 502210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04		10.01.05	
zweite.txt
01.
Region Ost 
02.
PB Berlin 
03.
Standortname	Fehler	                11	22	33	63  
04.
202210011A	Lücke Muss (60)	01.02.01	30.08.01	21.08.01	02.10.02	 
05.
202210034A	Lücke Muss (60)	15.03.04	15.03.04	24.10.02	28.11.02  
06.
202210035A	Lücke Muss (60)	15.03.04	15.03.04	05.11.04	07.05.03	 
07.
PB Leipzig 
08.
Standortname	Fehler	                11	22	33	63  
09.
202210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04	10.01.05	 
10.
Region West 
11.
PB Dortmund 
12.
Standortname	Fehler	                11	22	33	63	 
13.
305210001A	Lücke Muss (60,63)	28.08.00	05.04.02	23.10.97		 
14.
305210014B	Lücke Muss (63,80)	16.01.01	15.02.01
Das sind jetzt zwei von vielleicht zwanzig .txt
mit meiner batch Datei werden jetzt alle Datensätze aus allen txt Dateien, welche mit einer zwei beginnen in die Gesamt.txt geschrieben.
Diese sieht dann so aus:
01.
202210011A	Lücke Muss (60)	01.02.01	30.08.01	21.08.01	05.08.02	02.10.02	 
02.
202210034A	Lücke Muss (60)	15.03.04	15.03.04	24.10.02		28.11.02 202210035A	Lücke Muss (60)	15.03.04	15.03.04	05.11.04		07.05.03	 
03.
202210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04		10.01.05 
04.
202210011A	Lücke Muss (60)	01.02.01	30.08.01	21.08.01	02.10.02	 
05.
202210034A	Lücke Muss (60)	15.03.04	15.03.04	24.10.02	28.11.02  
06.
202210035A	Lücke Muss (60)	15.03.04	15.03.04	05.11.04	07.05.03	 
07.
202210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04	10.01.05	
Jetzt sollte eigentlich einmal die Spaltenüberschrift ausgelesen werden und in die erste Zeile geschrieben werden:

01.
Standortname	Fehler	                11	22	33	40	63 
ist in Acces dann die Spaltenüberschrift

01.
Standortname	Fehler	                11	22	33	40	63  
02.
202210011A	Lücke Muss (60)	01.02.01	30.08.01	21.08.01	05.08.02	02.10.02	 
03.
202210034A	Lücke Muss (60)	15.03.04	15.03.04	24.10.02		28.11.02 202210035A	Lücke Muss (60)	15.03.04	15.03.04	05.11.04		07.05.03	 
04.
202210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04		10.01.05 
05.
202210011A	Lücke Muss (60)	01.02.01	30.08.01	21.08.01	02.10.02	 
06.
202210034A	Lücke Muss (60)	15.03.04	15.03.04	24.10.02	28.11.02  
07.
202210035A	Lücke Muss (60)	15.03.04	15.03.04	05.11.04	07.05.03	 
08.
202210051A	Lücke Muss (60)	19.09.05	19.09.05	29.10.04	10.01.05	
so sollte die Datei Gesamt.txt dann aussehen.
Jetzt ist mir jedoch aufgefallen das einige txt Dateien Spalten weniger haben.
Zum Beispiel fehlt bei der zweite.txt die Spalte 40
In der gesamt.txt ist die Spalte 40 aber vorhanden.
Nun schiebt er mir die Daten zusammen. Soll heißen, was in der zweite.txt in Spalte 63 steht wird in die Spalte 40 geschoben.
Das darf nicht sein.
Ihc schick mal mein batch code auch.
01.
@echo off 
02.
 
03.
set Pfad1=... 
04.
set Pfad2=... 
05.
 
06.
If exist %Pfad1%\Gesamt.txt del %Pfad1%\Gesamt.txt 
07.
If exist %Pfad1%\wertlos.txt del %Pfad1%\wertlos.txt 
08.
 
09.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> fertig\Gesamt.txt 
10.
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> fertig\wertlos.txt
Ich wäre euch unheimlich dankbar wenn mir jemand bei diesem Problem helfen kann.

Gruß Gin
[Edit Biber] Auf <code> umformatiert. [/Edit]
Bitte warten ..
Mitglied: 46933
03.05.2007 um 13:28 Uhr
gut, das Datum steht immer unter den Zahlen.
sieht ein wenig unübersichtlich aus
Bitte warten ..
Mitglied: bastla
03.05.2007 um 13:34 Uhr
Hallo ginivpj!

Beim Posten solltest Du Code, aber auch zB Deine Beispieldaten, unter "< code>"- bzw "< /code>"-Tags setzen (ohne die Leerzeichen nach "<").

Grüße
bastla
Bitte warten ..
Mitglied: Biber
03.05.2007 um 22:02 Uhr
Moin ginivpj,

ihr treibt aber auch immer eine gequirlte... ähm... Rohdatenmasse auf..*grmpfff*

Aber mit Batch geht ja bekanntlich alles....
Ich hoffe, folgender Ansatz hilft Dir weiter.
Die Schwierigkeit ist, dass in der Input-Datei (ich habe sie beim Testen "gini.txt" genannt) die einzelnen Spalten mit TABs getrennt sind. (Welches Programm auch immer so einen Shice macht).

Wenn ein Wert fehlt, stehen dort eben zwei TABS.
Auch das lässt sich handeln. Mit dem oben geposteten Beispiel als gini.txt:
01.
@echo off & setlocal 
02.
@for /f "delims=" %%i in ('findstr /b "20221" gini.txt') do call :processLine "%%i" 
03.
goto :eof       
04.
:processLine 
05.
set "line=%~1"  
06.
REM ACHTUNG ---- in der nächsten zeile ist ein TAB nach dem Doppelpunkt!!!! 
07.
set "line=%line:	=§%" 
08.
Set "line=%line:§§=§--leer--§%" 
09.
Set "line=%line:§§=§--leer--§%" 
10.
@for /f "tokens=3-9 delims=§" %%i in ("%line%") do @echo [11]%%i [22]:%%j [33]:%%k [40]:%%l [63]:%%m
...erzeuge ich folgenden Output:
01.
>e:\schnipsel\gini 
02.
[11]01.02.01 [22]:30.08.01 [33]:21.08.01 [40]:05.08.02 [63]:02.10.02 
03.
[11]15.03.04 [22]:15.03.04 [33]:24.10.02 [40]:--leer-- [63]:28.11.02 
04.
[11]15.03.04 [22]:15.03.04 [33]:05.11.04 [40]:--leer-- [63]:07.05.03 
05.
[11]19.09.05 [22]:19.09.05 [33]:29.10.04 [40]:--leer-- [63]:10.01.05 
06.
[11]15.03.04 [22]:15.03.04 [33]:24.10.02 [40]:--leer-- [63]:28.11.02 
07.
[11]15.03.04 [22]:15.03.04 [33]:05.11.04 [40]:--leer-- [63]:07.05.03 
08.
[11]19.09.05 [22]:19.09.05 [33]:29.10.04 [40]:--leer-- [63]:10.01.05 
09.
[11]01.02.01 [22]:30.08.01 [33]:21.08.01 [40]:02.10.02 [63]: 
10.
[11]15.03.04 [22]:15.03.04 [33]:24.10.02 [40]:28.11.02 [63]: 
11.
[11]15.03.04 [22]:15.03.04 [33]:05.11.04 [40]:07.05.03 [63]: 
12.
[11]19.09.05 [22]:19.09.05 [33]:29.10.04 [40]:10.01.05 [63]:
...das heißt, ich kann die Werte in Spalte [63] auch der richtigen Spalte zuordnen.
Dort, wo ich jetzt "--leer--" reingeschieben habe, kannst Du ja etwas Sinnvolles/Verarbeitbares schreiben.

ABER: ist IMHO alles Grütze.
Der richtigere Weg für Dich MUSS sein, irgendwie (Drohung, Einschüchterung, Bestechung, Neuprogrammierung) das Inputformat von TAB-delimited auf comma-separated o.ä. umzustellen.

Mit diesen TABs ist es...hmm... etwas für Leute, die Batches richtig lieb haben.

Gruss
Biber
Bitte warten ..
Mitglied: bastla
04.05.2007 um 08:53 Uhr
Hallo ginivpj!

Zur generellen Problematik der Ausgangsdaten hat, wie ich meine, Biber schon alles gesagt, daher zurück zur eigentlichen Fragestellung:
Durch die unterschiedliche Feldanzahl ändert sich auch Deine ursprüngliche Anforderung hinsichtlich der Überschrift - diese müsste jetzt eigentlich lauten: Schreib die längste mit dem Wort "Standortname" beginnende Zeile aus allen ".txt"-Dateien in "fertig\Gesamt.txt"!
Umsetzen könntest Du das (unter Zuhilfenahme eines temporären VBScripts) etwa so:
01.
set "Len=%temp%\GetLen.vbs" 
02.
echo WScript.Echo Len(WScript.Arguments(0))>"%Len%" 
03.
set Header= 
04.
set /a Lang=0 
05.
for /f "tokens=3 delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\*.txt') do call :ProcessHeader "%%i" 
06.
echo %Header%>>fertig\Gesamt.txt 
07.
del "%Len%" 
08.
goto :GetBody 
09.
:ProcessHeader 
10.
for /f %%n in ('cscript //nologo "%Len%" %1') do set /a L=%%n 
11.
if %L% leq %Lang% goto :eof 
12.
set "Header=%~1" 
13.
set /a Lang=%L% 
14.
goto :eof 
15.
:GetBody 
16.
::ab hier weiter mit der Verarbeitung der einzelnen Datensätze (siehe dazu Biber's Lösung)
Kurze Erklärung: Im ":ProcessHeader"-Unterprogramm wird für jede passende Zeile zunächst (mit Hilfe des in der Datei %Len% gespeicherten VBScripts) die Länge in Zeichen festgestellt. Ist diese <= der bisher größten Länge, kann auf diese Zeile verzichtet werden, anderenfalls wird die Zeile zwischengespeichert und die jetzt neue größte Länge ebenfalls in einer Variablen festgehalten.

Nachdem alle ".txt"-Dateien untersucht wurden, enthält die Variable %Header% die Überschrift mit der größten Zeichenanzahl. Diese wird in die "Gesamt.txt" geschrieben.

Abschließend wird noch die temporäre VBS-Datei gelöscht und zur eigentlichen Verarbeitung (bei ":GetBody") weitergeleitet.

Grüße
bastla
Bitte warten ..
Mitglied: 46933
04.05.2007 um 10:16 Uhr
Hallo,

also erst mal danke für eure Mühen.
Mit den gequirlten Ausgangsdaten habt ihr recht
Ich bin auch funknetzplaner und kein Programmierer und verstehe diese Wünsche überhaupt nicht
Nur aus irgendeinem Grund soll ich so ein Programmchen schreiben was das macht.
Also ich habe erst mal mit einem Problem angefangen.
Diese Spaltenüberschrift hin zu bekommen.
Ich habe bastla´s vorschlag eingebaut.
Es funktioniert alles wie vorher?????
01.
@echo off 
02.
 
03.
set Pfad1=H:\privat\muss_st1\fertig 
04.
set Pfad2=H:\privat\muss_st1 
05.
 
06.
set "Len=%temp%\GetLen.vbs" 
07.
echo WScript.Echo Len(WScript.Arguments(0))>"%Len%" 
08.
set Header= 
09.
set /a Lang=0 
10.
for /f "tokens=3 delims=:" %%i in ('findstr /B "[Standortname]" %Pfad2%\*.txt') do call :ProcessHeader "%%i"  
11.
echo %Header% >> fertig\Gesamt.txt 
12.
del "%Len%" 
13.
goto :GetBody 
14.
:ProcessHeader 
15.
for /f %%n in ('cscript //nologo "%Len%" %1') do set /a L=%%n 
16.
if %L% leq %Lang% goto :eof 
17.
set "Header=%~1" 
18.
set /a Lang=%L% 
19.
goto :eof 
20.
:GetBody 
21.
 
22.
If exist %Pfad1%\Gesamt.txt del %Pfad1%\Gesamt.txt 
23.
If exist %Pfad1%\wertlos.txt del %Pfad1%\wertlos.txt 
24.
 
25.
REM Guten ins Töpfchen... 
26.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> fertig\Gesamt.txt 
27.
REM Schlechten ins Kröpfchen... 
28.
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> fertig\wertlos.txt
Was mache ich falsch?
Vielleicht hab ich es an der falschen Stelle eingebaut!
Ich verstehe die Welt nicht mehr
Bitte warten ..
Mitglied: Biber
04.05.2007 um 10:50 Uhr
Moin ginivpj,

Also ich habe erst mal mit einem Problem angefangen.
Das ist durchaus vernünftig. *g

Aber noch mal konkret die Frage:
Gibt es für Dich die Möglichkeit der Einflussnahme auf das Inputdatenformat??

Wenn etwas geliefert werden würde, was zur automatisierten Weiterverarbeitung (und nicht zum Ausdrucken und Abheften) gedacht ist, dann wäre das Geeiere drastisch reduzierbar.

Gruss
Biber
Bitte warten ..
Mitglied: bastla
04.05.2007 um 10:57 Uhr
Hallo ginivpj!

Deine Verwendung der Pfade ist nicht wirklilch konsequent, daher vielleicht so:
01.
@echo off & setlocal 
02.
 
03.
set Pfad1=H:\privat\muss_st1\fertig 
04.
set Pfad2=H:\privat\muss_st1 
05.
If exist "%Pfad1%\Gesamt.txt" del "%Pfad1%\Gesamt.txt" 
06.
If exist "%Pfad1%\wertlos.txt" del "%Pfad1%\wertlos.txt" 
07.
 
08.
set "Len=%temp%\GetLen.vbs" 
09.
echo WScript.Echo Len(WScript.Arguments(0))>"%Len%" 
10.
set Header= 
11.
set /a Lang=0 
12.
for /f "tokens=3 delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\*.txt') do call :ProcessHeader "%%i"  
13.
echo %Header% >>"%Pfad1%\Gesamt.txt" 
14.
del "%Len%" 
15.
goto :GetBody 
16.
 
17.
:ProcessHeader 
18.
for /f %%n in ('cscript //nologo "%Len%" %1') do set /a L=%%n 
19.
if %L% leq %Lang% goto :eof 
20.
set "Header=%~1" 
21.
set /a Lang=%L% 
22.
goto :eof 
23.
:GetBody 
24.
 
25.
REM Guten ins Töpfchen... 
26.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\Gesamt.txt" 
27.
REM Schlechten ins Kröpfchen... 
28.
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\wertlos.txt"
Grüße
bastla
Bitte warten ..
Mitglied: 46933
04.05.2007 um 11:21 Uhr
Auf die Dateien habe ich keinen Einfluß.
Die kommen von der Zentrale so bei uns an.
Ich habe auch nicht die leiseste Ahnung wie sie erstellt oder generiert werden.
Deshalb muß ich mich mit dem begnügen was ich kriege. Leider.

Aber mit den Spaltenüberschriften klappt es.
(Ja ich muß noch einiges lernen wenn das so weiter geht? Bin nicht so bewandert in batch)

Gut, denn Sinn mit den TAbs hab ich verstanden wie es Biber erklärt hat!
Das ist mir klar:

01.
REM ACHTUNG ---- in der nächsten zeile ist ein TAB nach dem Doppelpunkt!!!! 
02.
set "line=%line:    =§%" 
03.
Set "line=%line:§§=§--leer--§%" 
04.
Set "line=%line:§§=§--leer--§%"
Allerdings ist mir nicht verständlich:

01.
@echo off & setlocal 
02.
@for /f "delims=" %%i in ('findstr /b "20221" gini.txt') do call :processLine "%%i" 
03.
goto :eof       
04.
:processLine 
05.
set "line=%~1" 
und

01.
@for /f "tokens=3-9 delims=§" %%i in ("%line%") do @echo [11]%%i [22]:%%j [33]:%%k [40]:%%l [63]:%%m
Vielleicht könnt ihr mir das erklären?
Und vorallem wo bringe ich das hier unter?

01.
REM Guten ins Töpfchen... 
02.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\Gesamt.txt" 
03.
REM Schlechten ins Kröpfchen... 
04.
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\wertlos.txt"
Bitte warten ..
Mitglied: 46933
04.05.2007 um 14:14 Uhr
Ich hab jetzt ein bißchen probiert.
Glaube habe die einzelnen Schritte von biber kapiert.
Denke auch das ich alles richtig iengebaut habe.

01.
@echo off & setlocal 
02.
 
03.
set Pfad1=H:\privat\muss_st1\fertig 
04.
set Pfad2=H:\privat\muss_st1 
05.
If exist "%Pfad1%\Gesamt.txt" del "%Pfad1%\Gesamt.txt" 
06.
If exist "%Pfad1%\wertlos.txt" del "%Pfad1%\wertlos.txt" 
07.
 
08.
REM Schreib die längste mit dem Wort "Standortname" beginnende Zeile aus allen ".txt"-Dateien in "fertig\Gesamt.txt"! 
09.
REM Diese Zeile dient bei der verknüpfung nach Access als Spaltenüberschrift 
10.
set "Len=%temp%\GetLen.vbs" 
11.
echo WScript.Echo Len(WScript.Arguments(0))>"%Len%" 
12.
set Header= 
13.
set /a Lang=0 
14.
for /f "tokens=3 delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\*.txt') do call :ProcessHeader "%%i"  
15.
echo %Header% >>"%Pfad1%\Gesamt.txt" 
16.
del "%Len%" 
17.
goto :GetBody 
18.
:ProcessHeader 
19.
for /f %%n in ('cscript //nologo "%Len%" %1') do set /a L=%%n 
20.
if %L% leq %Lang% goto :eof 
21.
set "Header=%~1" 
22.
set /a Lang=%L% 
23.
goto :eof 
24.
:GetBody 
25.
 
26.
REM Schlechten ins Kröpfchen... 
27.
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >> "%Pfad1%\wertlos.txt" 
28.
 
29.
REM Guten ins Töpfechen... 
30.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do call :processLine "%%i" @echo %%i >> "%Pfad1%\Gesamt.txt" 
31.
goto : eof  
32.
:processLine 
33.
set "line=%~1"  
34.
REM ACHTUNG ---- in der nächsten Zeile ist ein TAB nach dem Doppelpunkt!!!! 
35.
REM Hier werden Tabs für nicht vorhandene Werte gesetzt! 
36.
set "line=%line:	=§%" 
37.
Set "line=%line:§§=§--leer--§%" 
38.
Set "line=%line:§§=§--leer--§%" 
39.
REM Hier werden die Spalten definiert! 
40.
REM Kommt eine dazu, nur an der entsprechenden Stelle eintragen! 
41.
for /f "tokens=3-9 delims=§" %%i in ("%line%") do @echo [11]%%i [30]:%%j [40]:%%k [60]:%%l [63]:%%m [70]:%%n [71]:%%o [80]:%%p [87]:%%q [90]:%%r [100]:%%s 
Als Output bekomme ich aber leider:

01.
Standortname	Fehler	11	30	40	60	63	70	71	80	87	90	100  
02.
[11]12.06.03 [30]:07.07.03 [40]:07.10.03 [60]:--leer-- [63]:27.05.04 [70]:29.07.04 [71]:18.11.04 [80]:%p [87]:%q [90]:%r [100]:%s  
03.
[11]07.02.06 [30]:07.02.06 [40]:26.08.97 [60]:29.08.97 [63]:12.10.97 [70]:12.11.97 [71]:05.12.06 [80]:%p [87]:%q [90]:%r [100]:%s  
04.
[11]07.02.06 [30]:07.02.06 [40]:05.11.97 [60]:20.02.98 [63]:25.02.98 [70]:30.04.98 [71]:20.12.06 [80]:%p [87]:%q [90]:%r [100]:%s  
05.
[11]07.02.06 [30]:07.02.06 [40]:07.10.03 [60]:15.05.04 [63]:27.05.04 [70]:29.07.04 [71]:26.01.07 [80]:%p [87]:%q [90]:%r [100]:%s  
06.
[11]19.06.06 [30]:13.09.06 [40]:--leer-- [60]:--leer-- [63]:--leer-- [70]:--leer-- [71]:26.02.07 [80]:%p [87]:%q [90]:%r [100]:%s  
07.
[11]07.02.06 [30]:07.02.06 [40]:12.03.99 [60]:27.04.99 [63]:05.05.99 [70]:18.06.99 [71]:16.02.07 [80]:%p [87]:%q [90]:%r [100]:%s  
08.
[11]07.02.06 [30]:07.02.06 [40]:29.07.99 [60]:24.11.99 [63]:01.12.99 [70]:10.01.00 [71]:15.01.07 [80]:%p [87]:%q [90]:%r [100]:%s  
09.
[11]07.02.06 [30]:07.02.06 [40]:10.04.06 [60]:30.03.06 [63]:--leer-- [70]:--leer-- [71]:10.04.06 [80]:%p [87]:%q [90]:%r [100]:%s  
10.
[11]15.06.06 [30]:29.06.06 [40]:--leer-- [60]:01.06.06 [63]:06.06.06 [70]:13.07.06 [71]:15.09.06 [80]:%p [87]:%q [90]:%r [100]:%s  
11.
[11]07.02.06 [30]:07.02.06 [40]:20.08.99 [60]:15.06.00 [63]:26.06.00 [70]:20.09.00 [71]:16.02.07 [80]:%p [87]:%q [90]:%r [100]:%s  
12.
[11]17.05.06 [30]:17.05.06 [40]:05.09.06 [60]:24.07.06 [63]:14.08.06 [70]:11.10.06 [71]:15.12.06 [80]:%p [87]:%q [90]:%r [100]:%s  
13.
[11]07.02.06 [30]:07.02.06 [40]:02.07.98 [60]:15.08.98 [63]:20.08.98 [70]:24.08.98 [71]:09.03.07 [80]:%p [87]:%q [90]:%r [100]:%s  
14.
[11]07.02.06 [30]:07.02.06 [40]:15.01.98 [60]:15.05.98 [63]:25.05.98 [70]:17.07.98 [71]:02.03.07 [80]:%p [87]:%q [90]:%r [100]:%s  
15.
[11]07.02.06 [30]:07.02.06 [40]:16.02.99 [60]:25.01.99 [63]:01.02.99 [70]:15.02.99 [71]:14.03.07 [80]:%p [87]:%q [90]:%r [100]:%s  
16.
[11]01.02.01 [30]:30.08.01 [40]:21.08.01 [60]:--leer-- [63]:02.10.02 [70]:28.05.03 [71]:22.07.03 [80]:%p [87]:%q [90]:%r [100]:%s  
17.
[11]15.03.04 [30]:15.03.04 [40]:24.10.02 [60]:--leer-- [63]:28.11.02 [70]:30.06.03 [71]:05.05.04 [80]:%p [87]:%q [90]:%r [100]:%s  
18.
[11]15.03.04 [30]:15.03.04 [40]:05.11.04 [60]:--leer-- [63]:07.05.03 [70]:28.05.03 [71]:14.05.04 [80]:%p [87]:%q [90]:%r [100]:%s  
19.
[11]15.03.04 [30]:15.03.04 [40]:05.11.04 [60]:--leer-- [63]:11.10.03 [70]:19.03.03 [71]:07.05.04 [80]:%p [87]:%q [90]:%r [100]:%s  
20.
[11]24.04.06 [30]:18.05.06 [40]:21.08.01 [60]:--leer-- [63]:07.05.03 [70]:28.05.03 [71]:25.09.06 [80]:%p [87]:%q [90]:%r [100]:%s  
21.
[11]24.04.06 [30]:18.05.06 [40]:26.04.05 [60]:--leer-- [63]:16.02.06 [70]:29.03.06 [71]:16.10.06 [80]:%p [87]:%q [90]:%r [100]:%s  
22.
[11]19.09.05 [30]:19.09.05 [40]:29.10.04 [60]:--leer-- [63]:10.01.05 [70]:11.02.05 [71]:19.07.06 [80]:%p [87]:%q [90]:%r [100]:%s  
23.
[11]20.10.03 [30]:20.10.03 [40]:24.11.04 [60]:--leer-- [63]:16.08.04 [70]:18.11.04 [71]:09.09.04 [80]:%p [87]:%q [90]:%r [100]:%s  
24.
[11]03.02.05 [30]:03.02.05 [40]:02.05.05 [60]:--leer-- [63]:15.01.07 [70]:01.02.07 [71]:16.11.06 [80]:%p [87]:%q [90]:%r [100]:%s  
25.
[11]18.07.03 [30]:27.04.04 [40]:20.08.03 [60]:--leer-- [63]:15.11.03 [70]:10.09.04 [71]:13.08.04 [80]:%p [87]:%q [90]:%r [100]:%s  
26.
[11]21.10.03 [30]:03.05.04 [40]:07.10.03 [60]:--leer-- [63]:27.05.04 [70]:10.09.04 [71]:27.10.04 [80]:%p [87]:%q [90]:%r [100]:%s 
So sollte es aber nicht sein.
Es sollte er so aussehen:

01.
Standortname	Fehler	11	30	40	60	63	70	71 
02.
305200080A	Lücke Muss (63)	04.04.03	03.12.03	15.01.98	24.09.04		 
03.
305201050A	Lücke Muss (71,80,87)	12.01.06	12.01.06	05.08.98	26.10.06	 
04.
305209998A	Lücke Muss (63)	20.02.03	20.02.03	23.10.97	20.02.03		  
05.
306200057A	Lücke Muss (63)	29.04.05	29.04.05	29.04.05	29.04.05		
Was ist nun daran falsch bei mir?
Bitte warten ..
Mitglied: bastla
04.05.2007 um 14:23 Uhr
Hallo ginivpj!

Gerade wollte ich dieses zum Besten geben (freue mich aber natürlich, dass Du es selbst geschafft hast):
01.
@echo off & setlocal 
02.
@for /f "delims=" %%i in ('findstr /b "20221" gini.txt') do call :processLine "%%i" 
03.
goto :eof       
04.
:processLine 
05.
set "line=%~1" 
Hier werden zunächst alle Zeilen der Beispieldatei "gini.txt", die mit "20221" beginnen, an das Unterprogramm ":ProcessLine" übergeben (unter Anführungszeichen, damit die gesamte Zeile erfasst wird).
Im Unterprogramm wird die Zeile "von den Anführungszeichen befreit" (%~1) und einer Variable %line% zugewiesen, damit sie weiterverarbeitet werden kann. Auch hier sorgen wieder die Anführungszeichen für den Zusammenhalt. %1 (und nicht etwa %%i) wird verwendet, da sich das Unterprogramm wie eine weitere Batch-Datei verhält, und die Zeile das erste (und einzige) Argument beim Aufruf darstellt.

01.
@for /f "tokens=3-9 delims=§" %%i in ("%line%") do @echo [11]%%i [22]:%%j [33]:%%k [40]:%%l [63]:%%m
Da vorher die Tabs durch "§" ersetzt wurden, können diese jetzt zum Zerlegen des Datensatzes in einzelne Felder verwendet werden, wobei (wie auch bisher schon von Dir verwendet) das erste Feld durch den dritten Bestandteil ("token") der Zeile repräsentiert wird. Da als Variable %%i verwendet wird, werden alle weiteren Bestandteile den folgenden Buchstaben zugewiesen (j, k, ...). Die eingestreuten [11], [22], etc dienen nur zur Demonstration der Zuordnung (ersetzen also quasi die Überschrift).
Was ist nun daran falsch bei mir?
Es hängt davon ab, ob Du die Kennzeichnung der leeren Felder benötigst oder ev ein anderes Trennzeichen als TAB einsetzen willst - falls beides "nein", sollte auch Deine bisherige Lösung genügen, ansonsten:
01.
REM Guten ins Töpfchen... 
02.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\*.txt') do call :processLine "%%i" 
03.
REM Schlechten ins Kröpfchen... 
04.
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\*.txt') do @echo %%i >>"%Pfad1%\wertlos.txt" 
05.
goto :eof 
06.
:processLine 
07.
set "line=%~1"  
08.
REM ACHTUNG ---- in der nächsten zeile ist ein TAB nach dem Doppelpunkt!!!! 
09.
set "line=%line:    =§%" 
10.
Set "line=%line:§§=§--leer--§%" 
11.
Set "line=%line:§§=§--leer--§%" 
12.
REM ACHTUNG ---- in der nächsten zeile ist ein TAB vor dem letzten Prozentzeichen!!!! 
13.
Set "line=%line:§=	% 
14.
echo %line%>>%Pfad1%\Gesamt.txt
Es wird jetzt am Ende das Trennzeichen wieder in TAB zurückgewandelt; an dieser Stelle kannst Du natürlich auch "," oder ";" verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: 46933
04.05.2007 um 14:39 Uhr
Ich benötige die Kennzeichnung der Felder da die Tabelle mit Access verknüpft wird.
Das macht mich ja wahnsinnig.
Es müssen die Tabs bestehen weil ja sonst das Datum nicht wirklich unter der richtigen Spaltenzahl steht.
Bitte warten ..
Mitglied: 46933
04.05.2007 um 14:41 Uhr
Die Daten sind alle da.
Nur wie gesagt, sie stehen nicht richtig unter den Spaltennamen.
Und beim Verknüpfen nach Access werden die Daten überhaupt nicht berücksichtigt.
Es erscheinen nur die Spaltennamen.
Also muß ich doch die Tabs beibehalten????
Bitte warten ..
Mitglied: bastla
04.05.2007 um 15:00 Uhr
Hallo ginivpj!

Nachtrag: Wenn Du von TAB auf zB ";" umstellst, muss das natürlich auch bei der Überschrift gemacht werden, also etwa
01.
echo %Header:	=;% >>"%Pfad1%\Gesamt.txt"
Nach dem Doppelpunkt steht auch hier ein TAB.
Ich sehe das Problem aber generell darin, dass Du versuchst, Tabellen mit verschiedenem Aufbau zusammenzufassen (in denen - entgegen Biber's Annahme - fehlende Felder nicht "freigehalten", sondern einfach ignoriert werden), etwa
01.
Standortname    Fehler                    11    22    33    40    63
und
01.
Standortname    Fehler                    11    22    33    63
Wenn dann zB noch
01.
Standortname    Fehler                    11    22    40    63
dazukommt, ist das Durcheinander perfekt. Sehe ich das so richtig?

Eigentlich könnte die Lösung nur so aussehen, dass jeder einzelnen "PB"-Abschnitt (oder, wenn die Struktur einheitlich ist, auch eine gesamte Datei) für sich betrachtet und mit der passenden Überschrift in eine eigene Textdatei geschrieben und einzeln importiert wird, wodurch sich Access beim Import an den Feldnamen orientieren kann (wie ich hoffe).

Grüße
bastla
Bitte warten ..
Mitglied: Biber
04.05.2007 um 19:01 Uhr
@bastla
Eigentlich könnte die Lösung nur so aussehen, ...
...oder aber, die Inhalte der Textdateien mit mal 6, mal 7 und manchmal auch 8 Spalten werden vorher auf ein einheitliches "Layout" gebracht.

Es kann ja auch kein Hexenwerk sein, per Batch eine weder in der Überschrift noch als Spalteninhalt vorhandene Spalte namens "[33]" mit anzulegen im Kopf wie auch mit Inhalt "--leer--"

Aber stressärmer wäre schon ein Einzelverarbeitung der Dateien - wenn die unterschiedliche Inhalte haben (z.B. Äpfel und Birnen), dann lassen die sich eigentlich nicht aggregieren.

@46933
Ich will nicht penetrant sein, aber... ist es für Dich absolut ausgeschlossen, am Montach mal in der Zentrale anzurufen und ein konstruktuves Telefonat einzuleiten mit den Worten: "Ich kann diese merkwürdigen beliebigen Outputdateien nicht automatisiert verarbeiten, könnt ihr mal eben was Vernünftiges erzeugen und schafft ihr das noch bis 10:30h?"

Denn Batch hat schon etwas mit "automatisierter Verarbeitung" zu tun...
Und dazu braucht man/frau ein paar feste Punkte im Raum.

Gruß
Biber
Bitte warten ..
Mitglied: bastla
04.05.2007 um 20:04 Uhr
@Biber

Eigentlich könnte die Lösung nur so aussehen, ...
Ok, das "nur" ziehe ich zurück ...

...oder aber, die Inhalte der Textdateien mit mal 6, mal 7 und manchmal auch 8 Spalten werden vorher auf ein einheitliches "Layout" gebracht.
Eine entsprechende Passage hatte ich noch rechtzeitig aus meinem obigen Statement eliminiert, da ich beide der anderen Varianten bevorzugen würde.

Grüße
bastla
Bitte warten ..
Mitglied: 46933
07.05.2007 um 09:41 Uhr
01.
Wenn dann zB noch 
02.
 
03.
Standortname    Fehler                    11    22    40    63 
04.
 
05.
dazukommt, ist das Durcheinander perfekt. Sehe ich das so richtig?
Genauso sieht es aus

Also ist es wohl besser wenn ich alle vorhandenen txt Dateien in einzelne txt Dateien auslese und diese dann einzeln mit Access verknüpfe!!

Das kann ich doch aber auch alles in einer batch Datei realisieren, oder?
Dazu kommt das ich dann ja auch aus jeder txt Datei eine Spaltenüberschrift brauche.
Meine Anforderung hinsichtlich der Überschrift müsste jetzt ja jetzt heißen: Schreib eine Zeile welche mit dem Wort "Standortname" beginnt aus "muss_st_ne21_aufbau.txt" in "fertig\muss_st_ne21_aufbau.txt"!
Also müßte ich jetzt für jede txt Datei schreiben:
01.
Schreib eine Zeile welche mit dem Wort "Standortname" beginnt aus "muss_st_ne21_aufbau.txt" in "fertig\muss_st_ne21_aufbau.txt"! 
02.
und dann 
03.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\muss_st_ne21_aufbau.txt') do @echo %%i >> fertig\muss_st_ne21_aufbau.txt
für die zweite txt Datei das gleiche????

01.
Schreib eine Zeile welche mit dem Wort "Standortname" beginnt aus "muss_st_ne30_aufbau.txt" in "fertig\muss_st_ne30_aufbau.txt"! 
02.
und dann 
03.
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\muss_st_ne30_aufbau.txt') do @echo %%i >> fertig\muss_st_ne30_aufbau.txt
Ist meine Überlegung korrekt?

Gruß Gini
Bitte warten ..
Mitglied: 46933
07.05.2007 um 12:42 Uhr
Also ich habe jetzt diesen Code

01.
@echo off & setlocal 
02.
 
03.
set Pfad1=H:\privat\muss_st1\fertig 
04.
set Pfad2=H:\privat\muss_st1 
05.
If exist "%Pfad1%\*.txt" del "%Pfad1%\*.txt" 
06.
 
07.
REM Guten ins Töpfchen... 
08.
for /f "delims=:" %%i in ('findstr /B "[Standortname]" %Pfad2%\muss_st_ne21_aufbau.txt') do @echo %%i >> fertig\muss_st_ne21_aufbau.txt 
09.
for /f "delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\muss_st_ne21_aufbau.txt') do @echo %%i >> fertig\muss_st_ne21_aufbau.txt 
10.
for /f "delims=:" %%i in ('findstr /B "[Standortname]" %Pfad2%\muss_st_ne20_aufbau.txt') do @echo %%i >> fertig\muss_st_ne20_aufbau.txt 
11.
for /f "delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\muss_st_ne20_aufbau.txt') do @echo %%i >> fertig\muss_st_ne20_aufbau.txt 
12.
 
13.
REM Schlechten ins Kröpfchen... 
14.
for /f "delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\muss_st_ne21_aufbau.txt') do @echo %%i >>fertig\wertlos.txt 
15.
for /f "delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\muss_st_ne20_aufbau.txt') do @echo %%i >>fertig\wertlos.txt
Und er schreibt alles perfekt in in die einzelnen txt Dateien.
Ausser:::::
01.
for /f "delims=:" %%i in ('findstr /B "[Standortname]" %Pfad2%\muss_st_ne20_aufbau.txt') do @echo %%i >> fertig\muss_st_ne20_aufbau.txt
bei diesem Befehl schreibt er mir wieder alle vorhandenen Zeilen mit dem Anfang "Standortname" in die entsprechende Datei.
Jetzt hab ich diese Zeile wieder mehrmals in den Dateien.
Ich will sie aber doch nur einmal.
Bitte warten ..
Mitglied: 46933
07.05.2007 um 12:55 Uhr
OK.
Nach dem basteln habe ich folgenden Code gefunden der mir alles in einzelne Dateien schreibt mit nur einer Spaltenüberschrift.

01.
@echo off & setlocal 
02.
 
03.
set Pfad1=H:\privat\muss_st1\fertig 
04.
set Pfad2=H:\privat\muss_st 
05.
set Geschrieben= 
06.
If exist "%Pfad1%\*.txt" del "%Pfad1%\*.txt" 
07.
 
08.
REM Guten ins Töpfchen... 
09.
 
10.
for /f "delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\muss_st_ne21_aufbau.txt') do if not defined Geschrieben @echo %%i >> fertig\muss_st_ne21_aufbau.txt & set Geschrieben=True 
11.
for /f "delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\muss_st_ne21_aufbau.txt') do @echo %%i >> fertig\muss_st_ne21_aufbau.txt 
12.
for /f "delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\muss_st_ne20_aufbau.txt') do if not defined Geschrieben @echo %%i >> fertig\muss_st_ne20_aufbau.txt & set Geschrieben=True 
13.
for /f "delims=:" %%i in ('findstr /B /R "[2]" %Pfad2%\muss_st_ne20_aufbau.txt') do @echo %%i >> fertig\muss_st_ne20_aufbau.txt 
14.
 
15.
REM Schlechten ins Kröpfchen... 
16.
for /f "delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\muss_st_ne21_aufbau.txt') do @echo %%i >>fertig\wertlos.txt 
17.
for /f "delims=:" %%i in ('findstr /V /B /R "[2]" %Pfad2%\muss_st_ne20_aufbau.txt') do @echo %%i >>fertig\wertlos.txt
Nur mal als Feedback!!!
Ist das die beste Lösung vom Code her???

Danke

Gini
Bitte warten ..
Mitglied: 46933
07.05.2007 um 13:12 Uhr
Sorry, das ich nerve.
So ganz richtig funktioniert es doch noch nicht.
Die erste Datei wird korrekt ab gearbeitet.
01.
 
02.
REM Guten ins Töpfchen... 
03.
 
04.
for /f "delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\muss_st_ne21_aufbau.txt') do if not defined Geschrieben @echo %%i >> fertig\muss_st_ne21_aufbau.txt & set Geschrieben=True
So wie ich es brauche.
Aber die danach folgenden nicht.
Die Datensätze werden zwar in die entsprechende Datei geschrieben, jedoch ohne Spaltenüberschrift?
Es muß mit diesem Befehl zusammen hängen:

01.
for /f "delims=:" %%i in ('findstr /B "Standortname" %Pfad2%\muss_st_ne20_aufbau.txt') do if not defined Geschrieben @echo %%i >> fertig\muss_st_ne20_aufbau.txt & set Geschrieben=True
Und warum?
Müssen diese dann anders sein?
Bitte warten ..
Mitglied: bastla
07.05.2007 um 17:34 Uhr
Hallo ginivpj!

Nachdem die Variable %Geschrieben% erstmals einen Wert erhalten hat, wird keine weitere Überschrift in die Zieldatei geschrieben - daher müsstest Du vor dem Bearbeiten der zweiten Datei mit
01.
set Geschrieben=
die Variable wieder löschen. Allerdings hast Du etwa 20 Dateien erwähnt, und die wirst Du doch nicht alle einzeln im Batch anführen wollen?!

Wenn alle in "H:\privat\muss_st1" enthaltenen Textdateien bearbeitet werden sollen, könntest Du das etwa so lösen:
01.
@echo off & setlocal 
02.
 
03.
set Pfad1=H:\privat\muss_st1\fertig 
04.
set Pfad2=H:\privat\muss_st1 
05.
 
06.
If exist "%Pfad1%\*.txt" del "%Pfad1%\*.txt" 
07.
 
08.
for %%f in ("%Pfad2%\*.txt") do call :ProcessFile "%%f" 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set Geschrieben= 
13.
REM Guten ins Töpfchen... 
14.
for /f "delims=:" %%i in ('findstr /B "Standortname" %1') do if not defined Geschrieben @echo %%i >> "%Pfad1%\%~nx1" & set Geschrieben=True 
15.
for /f "delims=:" %%i in ('findstr /B /R "[2]" %1') do @echo %%i >> "%Pfad1%\%~nx1" 
16.
 
17.
REM Schlechten ins Kröpfchen... 
18.
for /f "delims=:" %%i in ('findstr /V /B /R "[2]" %1') do @echo %%i >>"%Pfad1%\wertlos.txt" 
19.
goto :eof
Durch die Schleife vorneweg werden alle Textdateien der Reihe nach an das Unterprogramm ":ProcessFile" weitergereicht, wo sie wie bisher zerlegt und in eine passende Zieldatei geschrieben werden (%~nx1 bedeutet: Nimm von der übergebenen Datei (%1 im Unterprogramm) nur den Namen und die Extension, also den Dateityp).

Grüße
bastla
Bitte warten ..
Mitglied: 46933
08.05.2007 um 11:23 Uhr
Super!
Es hat alles geklappt.
Das Problem ist gelöst.
Ich möchte mich für die schnelle Hilfe von euch bedanken.
Macht weiter so.

Gruß Gini
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...