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

TXT-Dateien mit Batch verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: Arnie79

Arnie79 (Level 1) - Jetzt verbinden

10.01.2012, aktualisiert 12:48 Uhr, 2624 Aufrufe, 7 Kommentare

Hallo zusammen,
ich benötige Hilfe bei der Verarbeitung mehrerer TXT-Dateien mittels Batch. Ich habe mehrere Textdateien a.txt, b.txt usw., die wie folgt aufgebaut sind:

Datum:;01.01.2012
Quelle:;Standort
Zeit;;;SpalteA;SpalteB;SpalteC;SpalteD;SpalteE;SpalteF;SpalteG;SpalteH
Gesamt;;0;0;0;0;0;0;0;0;0
7:15;-;7:30;0;0;0;0;0;0;0;0;0
7:30;-;7:45;0;0;0;0;0;0;0;0;0

Die wichtigen Zeilen beginnen für mich ab Zeile 4, da sich dort die eigentlichen Daten befinden. Mit dem folgenden Batch Code nehme ich, alle
Dateien und schreibe jeweils alle Zeilen außer die ersten 4 in die Datei total.txt mit der Ergänzung, dass ich die Quelle noch als zusätzliche Spalten anhänge.
Das klappt auch alles ganz gut. Was ich aber einfach nicht hinbekomme ist es, von jeder Datei das Datum aus der ersten Zeile in eine Variable zu schreiben
und dann ebenfalls als zusätzliche Spalte in die Zieldatei zu schreiben.

01.
set "source=C:\" 
02.
set var=""; 
03.
type nul > temp.txt 
04.
type nul > total.txt 
05.
for /D %%a in (a.txt, b.txt, c.txt, d.txt) do  
06.
07.
  set "filename=%%a" 
08.
  copy /Y "%source%%%a" temp.txt 
09.
  call :delLines 
10.
11.
goto :eof 
12.
 
13.
:delLines 
14.
for /f "tokens=1* delims=:" %%i in ('findstr /n $ temp.txt') do 
15.
16.
  if %%i gtr 4  
17.
18.
    echo %%j;%filename:~0,-4% >> total.txt 
19.
20.
21.
goto :eof 
22.
exit
Hier meine Versuch, der nicht funktioniert:

01.
:delLines 
02.
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ temp.txt') do 
03.
04.
  if %%i lss 2 
05.
06.
    set var=%%j 
07.
08.
  if %%i gtr 4  
09.
  (  
10.
    echo %%j;%filename:~0,-4%%var:~6% >> total.txt 
11.
12.
)
Ich hoffe, dass der Beitrag ok so ist. Ich habe auch bereits gesucht, und vieles ausprobiert, es aber nicht hinbekommen, weshalb ich also einen neuen Beitrag verfasst habe.

Gruß Arne
Mitglied: bastla
10.01.2012 um 13:11 Uhr
Hallo Arnie79!

Du könntest im einfachsten Fall das Datum (inkl Semikolon davor) so ausgeben:
01.
set /p "Zeile1=<temp.txt" 
02.
echo %Zeile1:~6%
Um übrigens Zeilen zu überspringen gibt es
for /f "skip=3 ..."
Außerdem ist in Zeile 5 die Option "/D" genauso unnötig, wie "/Y" in Zeile 8 ...

Schließlich kannst Du noch das "exit" einsparen oder durch ein "goto :eof" ersetzen.

Einen hab ich noch: Wenn Du nur den Dateinamen (ohne Typ) haben möchtest, kannst Du entweder in der Schleife anstelle von "a.txt" nur "a" verwenden und dann eben das ".txt" in Zeile 8 hinzufügen oder die Zeile 7 auf
set "filename=%%~na"
ändern bzw den Dateinamen beim Aufuf des Unterprogramms als Parameter übergeben und die Variable %filename% ganz einsparen:
01.
... 
02.
call :delLines "%%~na" 
03.
... 
04.
echo %%j;%~1%Zeile1:~6%
Grüße
bastla
Bitte warten ..
Mitglied: icsat
10.01.2012 um 13:24 Uhr
Hallo Arne,

es wäre hilfreich gewesen, wenn Du kurz geschrieben hättest, was genau bei Deinem Versuch nicht funktioniert. und welche Ausgabe Du bekommst.

Suche mal nach "setlocal EnableDelayedExpansion", denn die in der for-Schleife gesetzte Variable "var" ist sonst erst nach dem beenden der for-Schleife mit dem neuen Inhalt verwendbar.

Du könntest "var" am Anfang mal auf "irgendwas" setzten um zu sehen was ich meine.
Dannach könntest Du das script mit
01.
setlocal EnableDelayedExpansion
beginnen und die Ausgabe auf
01.
echo %%j;%filename:~0,-4%!var! >> total.txt
ändern.

Das sollte Dich erst mal weiter bringen.


Gruß icsAT
Bitte warten ..
Mitglied: bastla
10.01.2012 um 14:53 Uhr
@icsat
Nur als Anmerkung: Da die Ausgabe der Variablen %filename% erst im Unterprogramm (und damit einer neuen CMD-Instanz) erfolgt, ist "delayedExpansion" nicht erforderlich (aber, wie oben schon erwähnt: das trifft auch auf die Variable selbst zu ) ...

Grüße
bastla
Bitte warten ..
Mitglied: icsat
10.01.2012 um 15:21 Uhr
Hey bastla,

Grundsätzlich ist Deine Aussage bezüglich der Variablen "filename" richtig, ich habe jedoch von "var" und nicht von "filename" gesprochen, oder?

Natürlich ist Deine Variante schicker, ich wollte nur schnell auf einen mögliches Problem im Skript des TE hinweisen ohne einen völlig neuen Ansatz zu verfolgen. Ich Hatte Deinen Post vor meinem auch nicht gesehen, sonst hätte ich vermutlich gar nicht geantwortet, weil Du Dir ja schon die Mühe gemacht hast diverse Schwächen des Skriptes aufzuzeigen und entsprechende Verbesserungsvorschläge zu posten.


In diesem Sinne einen schönen Tag noch

icsAT
Bitte warten ..
Mitglied: bastla
10.01.2012 um 16:49 Uhr
Hallo icsat!
ich habe jedoch von "var" und nicht von "filename" gesprochen, oder?
Yep - sorry, hatte ich leider zu wenig genau gelesen ...

Grüße
bastla
Bitte warten ..
Mitglied: Arnie79
11.01.2012 um 10:05 Uhr
Hallo,
zunächst vielen Dank für die Antworten. Wäre wohl deutlich besser gewesen zu erwähnen wo genau mein Problem war. Also im Prinzip ging es um die Variable var, die mir immer den Initialwert ausgegeben hat und nicht den Wert den innerhalb der Funktion gesetzt habe. Mit dem Ansatz con icsat konnte ich das sehr schnell beheben und es läuft nun wie ich es wollte. Trotzdem würde ich auch gerne den anderen Ansatz verstehen, weil ich diesen ebenfalls ausprobiert habe und nicht das gewünschte Ergebnis bekommen habe.

Ich habe
01.
set /p "Zeile1=<temp.txt"
in die erste FOR Schleife gepackt, mit dem Ergebnis, dass meine bat-Datei immer an dieser Stelle mit einem Hinweis anhält und eine Tasteneingabe erwartet. Das Problem, dass ich innerhalb der Funktion nicht so richtig Zugriff auf die Variable besteht bei diesem Ansatz aber weiterhin. Was genau befindet sich sich nach dem Befehl denn in der Variable Zeile1.

Gruß Arne
Bitte warten ..
Mitglied: bastla
11.01.2012 um 12:21 Uhr
Hallo Arnie79!

Die entsprechende Zeile soll nicht in der Schleife (womit auch keine "delayedExpansion" erforderlich wird), sondern als erste Zeile im Unterprogramm ":delLines" verwendet werden. Nach Ausführung des Befehls enthält %Zeile1% den Inhalt der ersten Zeile der Datei "temp.txt".

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Mittels Batch alle .txt Dateien eines Verzeichnises ändern (10)

Frage von mttspeedy zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Variablen aus .txt Dateien heraus ausgeben (5)

Frage von Tobiased zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...