Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Arnie79

Arnie79 (Level 1) - Jetzt verbinden

10.01.2012, aktualisiert 12:48 Uhr, 2667 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 ..
Ähnliche Inhalte
Windows 7
BATCH: Alter einer TXT-Datei bestimmen
gelöst Frage von ahstaxWindows 75 Kommentare

Hallo, wie bekomme ich mit einer DOS-Batch das Alter einer TXT-Datei bestimmt und lassen dann, bspw bei Alter >16h, ...

Batch & Shell

Per Batch eine XLS-Datei in eine TXT-Datei umwandeln

Frage von skiing69Batch & Shell5 Kommentare

Hallo Wissende, ich möchte täglich automatisiert, ohne das Programm Excel zu öffnen, eine XLS-Datei in eine TXT-Datei (Feldtrennzeichen als ...

Batch & Shell

Alle Dateien aus einem Ordner verarbeiten

gelöst Frage von neo243Batch & Shell2 Kommentare

Hallo Leute, ich wollte aus einem Ordner alle dateien per ffmpeg Encoden bekomme dann aber leider folgenden Fehler: "%~a" ...

Batch & Shell

Ini File mit Batch auslesen und weiter verarbeiten

gelöst Frage von ZendaraBatch & Shell2 Kommentare

Hallo, Ich habe ein Problem mit einem Batch File welches mir Variablen aus einem Ini File auslesen und zB. ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL13 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs9 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...

Debian
Wie finde ich den betroffenen user
Frage von ProtectedDebian8 Kommentare

Hallo, Wie kann ich den User finden der dies verursacht hat? Betriebsystem ist Debian 7 your Server/Customer with the ...

Voice over IP
Vodafone IP Anlagenanschluss - TK-Anlage einrichten
Frage von BytedreherVoice over IP8 Kommentare

Moin Zusammen, wir hatten gestern bei uns die Umstellung auf den neuen IP Anschluss bei Vodafone. Vodafone IP Anlagenanschluss ...