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

Brauche ein Script um einfache Textdateien zusammenzufuegen

Frage Entwicklung Java

Mitglied: concertlive

concertlive (Level 1) - Jetzt verbinden

15.06.2008, aktualisiert 23:53 Uhr, 6674 Aufrufe, 6 Kommentare

Folgendes Problem:

möchte Textdatein zusammenfügen und dabei den Inhalt etwas umbenennen - wer wüßte ein Programm das sowas macht .... oder könnte mir mit einem Script hierzu weiterhelfen?

Folgendes Problem:

möchte Textdatein zusammenfügen und dabei den Inhalt etwas umbenennen - wer wüßte ein Programm das sowas macht .... oder könnte mir mit einem Script hierzu weiterhelfen?


Ausgangssituation:

habe Text-Dateien die folgendermaßen aufgebaut sind:


Namen der Dateien:

15060950.stx
15061010.stx
etc.

dabei sind die ersten 4 Zahlen Datum und Uhrzeit 15060950 = 15.06. 09:50 Uhr (also: ddmmhhmm)



der Inhalt der Textdateien sind Pfade zu Dateien:

zb.: Inhalt von Datei 15060950.stx

C:\Daten\Ordner1\datei-1.cat
C:\Daten\Ordner2\datei-2.cat
C:\Daten\Ordner3\datei-3.cat


zb.: Inhalt von DAtei 15061010.stx

C:\Daten\Ordner4\datei-4.cat
C:\Daten\Ordner5\datei-5.cat
C:\Daten\Ordner6\datei-6.cat



nun möchte ich die Dateien und deren Inhalte folgendermaßen zusammenfügen - in eine Datei mit neuem Namen, der alle Dateien mit gleichem Datum von oben zusammenfasst, die Pfade sollen dann chronologisch untereinander geschrieben werden:

neue Name: 150608t1.log (bedeutet: 15.06.08 und zusätzlich die benötigte Ergänzung t1.log )

dabei soll die neue Datei so aufgebaut sein:


die Uhrzeit soll vorangestellt werden und belegt die Position 1-5, danach 4 Leerzeichen, danach ab Position 10 der Dateiname ohne Pfadangabe und ohne Dateiendung:


09:50 datei-1
09:50 datei-2
00:50 datei-3
10:10 datei-4
10:10 datei-5
10:10 datei-6
etc.


... dieser Vorgang sollte automatisch laufen / oder wir manuell angestoßen und sodass man die täglich anfallenden Einzeldateien zu einer Tagesatei zusammenfasst / wünschenswert wäre die Möglichkeit auf Details Zugriff zu haben, wenn man mal wieder etwas ändern mächte ... zb. Pfade etc. (ich denke ein script dessen code ersichtlich ist würde diesen Zugriff bei Bedarf gestatten)


Ein ganz herzliches Dankeschön erstmal für jede Hilfe ... gerne würde ich auch nochmals nähere Beschreibungen telefonisch geben.

Matthias

[Edit Biber] Von "Java" nach "Batch und Shell" verschoben. [/Edit]
Mitglied: bastla
15.06.2008 um 20:36 Uhr
Hallo concertlive und willkommen im Forum!

Da Du nach einem "Programm oder Script" fragst, könnte ich Dir, obwohl Du den Bereich "Java" gewählt hast, einen Batch anbieten:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Ordner mit stx-Dateien" 
03.
set "QTyp=stx" 
04.
set "Ziel=D:\Ordner mit log-Dateien" 
05.
set "ZTyp=t1.log" 
06.
set Jahr=08 
07.
 
08.
if not exist "%Ziel%" md "%Ziel%" 
09.
for /f "delims=" %%i in ('dir /b /on "%Quelle%\*.%QTyp%"') do call :ProcessFile "%Quelle%\%%i" 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
set "Name=%~n1" 
14.
set "Tag=%Name:~,4% 
15.
set "Std=%Name:~4,2% 
16.
set "Min=%Name:~6,2% 
17.
for /f "usebackq delims=" %%d in (%1) do (echo %Std%:%Min%    %%~nd)>>"%Ziel%\%Tag%%Jahr%%ZTyp%" 
18.
goto :eof
Voraussetzung für das Funktionieren ist, dass im Quelldateinamen Tag, Monat, Stunde und Minute immer zweistellig geschrieben sind, da auf dieser Basis im Unterprogramm ":ProcessFile" die Zerlegung des Dateinamens (%~n1) in die einzelnen Bestandteile erfolgt.

Die Angabe des Jahres könnte zwar auch variabel erfolgen, aber da mir die näheren Umstände der Ausführung (Zusammenfassung der Einzeldateien noch am selben Tag, am nächsten Tag, einmal in der Woche / im Monat - wäre übrigens mit dem geposteten Lösungsvorschlag möglich) nicht bekannt sind, wird das Jahr als Konstante festgelegt.

Zu überlegen wäre übrigens auch noch, was mit den Quelldateien geschehen soll, nachdem die Inhalte in die Zieldatei übernommen wurden (in der derzeitigen Fassung wird bei der nächsten Ausführung des Scripts die entsprechende Zieldatei um die Daten der dann - noch - vorhandenen Quelldateien des jeweiligen Tages ergänzt), bzw, ob die Zieldatei bei jedem Start des Scripts neu (aus allen dann vorhandenen Quelldateien) erstellt werden soll - dann könnten die Quelldateien auch unverändert erhalten bleiben.

Grüße
bastla
Bitte warten ..
Mitglied: concertlive
15.06.2008 um 21:51 Uhr
hallo bastla,

nach dem ersten test bin ich schier vom hocker gefallen !!! das hast Du genial gemacht ... und ich dachte schon aus meiner beschreibung wird niemand klar ... einfach super !!

anfangs gab es noch probleme, da bei rauskopieren von hier noch leerzeichen drin waren und die werden 1:1 übernommen .. hab es aber gleich gemerkt und wieder angepaßt ..

der konvert soll ca. täglich angestoßen werden - aber das mit dem Jahr als konstante ist ja kein großes problem ... einen jahreswechsel haben wir alle 365 tage und dann schreibt man einfach ein 2009er-script mit eingefügter 09

alte quelldateien lösche ich von zeit zu zeit weg ... und dass das script über die neuen (sprich zukünftigen) immer wieder drübergeht ist OK ... es könnten sich ja daten verändert haben oder neue quelldaten zu anderen zeiten pro tag hinzugekommen sein ....

eine bitte vielleicht noch weil der code mir doch etwas "spanisch" ist:

wie würde es aussehen wenn das sceipt an der stelle 10 in der zieldatei doch den ganzen pfad der datei schreibt, bloß die dateiendung .cat in die endung .dxx austauscht?

Ansonsten nochmals: vielen vielen DANK Dir

Matthias
Bitte warten ..
Mitglied: bastla
15.06.2008 um 22:06 Uhr
Hallo concertlive!

wie würde es aussehen wenn das sceipt an der stelle 10 in der zieldatei doch den ganzen pfad der datei schreibt, bloß die dateiendung .cat in die endung .dxx austauscht?
Die Zeile 17 würde sich ändern auf
01.
for /f "usebackq delims=" %%d in (%1) do (echo %Std%:%Min%    %%~dpnd.dxx)>>"%Ziel%\%Tag%%Jahr%%ZTyp%" 
Anstelle nur des Namens ("%%~nd") wird mit "%%~dpnd" auch "drive" und "path" mit ausgegeben (und die neue Endung hinzugefügt).

alte quelldateien lösche ich von zeit zu zeit weg ... und dass das script über die neuen (sprich zukünftigen) immer wieder drübergeht ist OK ... es könnten sich ja daten verändert haben oder neue quelldaten zu anderen zeiten pro tag hinzugekommen sein ....
Wenn die bereits übernommenen Dateien beim nächsten Start des Scripts noch vorhanden sind, wirst Du deren Inhalte doppelt in der Zieldatei vorfinden - insofern wäre es vielleicht sinnvoll, die ".stx"-Dateien zb durch das Hinzufügen eines ".done" an den Dateinamen als "verarbeitet" zu kennzeichnen, ohne sie sofort löschen oder verschieben zu müssen - soferne eine bereits erstellte ".stx"-Datei nachträglich nicht nochmals (durch das erstellende Programm) verändert wird, wäre dies ein gangbarer Weg.

Falls Du das Umbenennen testen möchtest, füge nach Zeile 17 noch hinzu:
01.
ren %1 "%~1.done">nul
Grüße
bastla
Bitte warten ..
Mitglied: concertlive
15.06.2008 um 22:41 Uhr
hallo bastla,

komplette pfade + andere Dateiendung klappt!

bloß:
bei ren %1 "%~1.done">nul kommt syntaxfehler ... und geht somit nicht - irgendwas ist da noch faul.....

aber die idee ist gut - habe tatsächlich bemerkt dass er am ende der datei beim erneuten ausführen des scripts wieder alles reinschreibt/hinzufügt (was nicht sein darf) - aber da die stx-dateien nur in eine richtung erstellt werden und vom erstellenden programm nicht gelesen werden, können diese gerne umbenannt werden ... oder gar gelöscht ... (wäre vielleicht gut beides in der schublade zu haben )


nochmals verbindlichsten Dank
Bitte warten ..
Mitglied: bastla
15.06.2008 um 22:52 Uhr
Hallo concertlive!

Nochmals als vollständige Version:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Ordner mit stx-Dateien" 
03.
set "QTyp=stx" 
04.
set "Ziel=D:\Ordner mit log-Dateien" 
05.
set "ZTyp=t1.log" 
06.
set Jahr=08 
07.
 
08.
if not exist "%Ziel%" md "%Ziel%" 
09.
for /f "delims=" %%i in ('dir /b /on "%Quelle%\*.%QTyp%" 2^>nul') do call :ProcessFile "%Quelle%\%%i" 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
set "Name=%~n1" 
14.
set "Tag=%Name:~,4% 
15.
set "Std=%Name:~4,2% 
16.
set "Min=%Name:~6,2% 
17.
for /f "usebackq delims=" %%d in (%1) do (echo %Std%:%Min%    %%~dpnd.dxx)>>"%Ziel%\%Tag%%Jahr%%ZTyp%" 
18.
ren %1 "%~nx1.done" 
19.
::del %1 
20.
goto :eof
Umbenennen sollte jetzt auch klappen (hatte vorher beim neuen Dateinamen noch den Pfad dabei, jetzt wird nur noch Name und Extension sowie der Zusatz ".done" verwendet), und wenn Du tatsächlich löschen willst, kannst Du anstelle der "ren"-Zeile (18) die "del"-Zeile (19) verwenden - mit "::" am Beginn der Zeile wird diese auskommentiert, sodass Du die Doppelpunkte nur in die jeweils nicht benötigte Zeile setzen musst.

Grüße
bastla
Bitte warten ..
Mitglied: concertlive
15.06.2008 um 23:53 Uhr
bastla es ist ein traum !!

Dein Script ist GENIAL ....

Danke Dir tausendmal ...

Es ist super nett dass Du Dir die Zeit und die Mühe genommen hast .... ich hoffe das Du hier noch ebensoviel Hilfe für eventuelle Fragen deinerseits bekommast !!

Liebe Grüße
Matthias
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Batch & Shell
Script zum Auflösen einer Ordnerstruktur und zurück gesucht (12)

Frage von websolutions zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

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

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...