menorax
Goto Top

Mehrere Textdateien mit Datumsstempel in einer Textdatei pro Tag zusammenfassen

Guten Morgen an alle,

ich beschäftige mich seit mehreren Tagen mit einem Script, wobei ich leider keine Lösung finden kann. Ich hoffe, ihr könnt mir dabei helfen...

Ich bekomme einmal im Monat Textdateien auf ein Laufwerk gestellt (zwischen 800 und 1200 Dateien). Da das ganze etwas unübersichtlich ist, möchte ich diese pro Tag in eine Textdatei zusammenfassen. Dabei haben alle Dateien dieselbe Semantik:

C1389_HBOR551619BLAS1603300750.txt
C1395_KOSK577905BLAS1603300858.txt
C5376_CBEM475660BLAS1603080913.txt

Zur Erklärung, am Anfang der Datei ist die Referenznummer (C5376_CBEM475660BLAS) gefolgt vom Datum und Uhrzeit (1603080913). Was ich erreichen will, ist, für jeden Tag eine Textdatei mit dem Namen 160308.txt zu generieren und die Inhalte der einzelnen Dateien dort einzufügen.
Es ist wichtig, daß die Referenznummer mit in die neue Datei geschrieben wird.

So sollte das Ergebnis zum Beispiel aussehen:

Referenznummer: C1389_HBOR551619BLAS

Inhalt der Datei C1389_HBOR551619BLAS1603300750.txt


Referenznummer: C1395_KOSK577905BLAS

Inhalt der Datei C1395_KOSK577905BLAS1603300858.txt


usw.

Das war die grundsätzliche Aufgabenstellung.
Ich habe, wie schon oben erwähnt, angefangen ein Script zu basteln. Ich bin leider kein professioneller Scripter oder Programmierer, und würde mich über Anregungen sehr freuen:

@echo OFF
setlocal ENABLEDELAYEDEXPANSION

set "Duplikate=Dupl.txt"  

copy nul "%Duplikate%">nul  

for /f %%F in ('dir /b /O-N "C*.txt"') do (  
	set MVC=%%~nF
	echo !MVC:~-10,6!_%%F >> DAT.txt
)
for /f %%G in (DAT.txt) do set MVD=%%G & call :Prozess1

:Prozess1
findstr /b /c:"%MVD:~,6%" %Duplikate% > nul || >> %Duplikate% echo %MVD:~,6%  
goto :eof

endlocal

Zur Erklärung: Ich lese die Dateien aus und schreibe das Ergebnis in eine Textdatei DAT.txt (ich war mir nicht sicher, ob dieser Schritt notwendig ist). Danach erstelle ich eine Datei Dupl.txt, in welche ich das enthaltene Datum der Dateien ohne Duplikate schreibe.
Ich komme nur an dem Punkt nicht weiter, an dem ich die Dateien wieder zusammenfügen müßte.

Für eure Mühen und Hilfestellungen möchte ich mich schon jetzt ganz herzlich bedanken.

Viele Grüße
Menorax

Content-Key: 301657

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

Printed on: April 16, 2024 at 09:04 o'clock

Member: TlBERlUS
TlBERlUS Apr 13, 2016 at 07:52:57 (UTC)
Goto Top
Hi,

Powershell:
clear-host
$source = "C:\Users\test\Desktop\source"  
$files = gci $source
foreach($f in $files){
    $datum = $f.Name
   $datum = $datum.Substring(20) 
   #$datum.replace("[0-9]{4}.txt",'') 
   $datum = $datum -creplace"[0-9]{4}.txt"  
    Get-Content $source\$f | Add-Content c:\$datum.txt 
}
Mitglied: 114757
Solution 114757 Apr 13, 2016 updated at 09:24:33 (UTC)
Goto Top
Elegant mit Powershell so:
$quelle = 'c:\quelle'  
$ziel = 'c:\ziel'  
gci $quelle -Filter *.txt | group {[regex]::match($_.Basename,'(\d+)\d{4}$').Groups[1].Value} | %{  
    $d = $_.Name
    $_.Group | %{
        $refnum = [regex]::match($_.Basename,'^(.*?)(\d+)$').Groups[1].Value  
        @("Referenznummer: $refnum" ,(gc $_.Fullname)) | Add-Content "$ziel\$d.txt"  
    }
}
Gruß jodel32
Member: TlBERlUS
TlBERlUS Apr 13, 2016 at 08:58:29 (UTC)
Goto Top
Zitat von @114757:

Elegant mit Powershell so:
Und sticheln tut er auch noch -.-
Mitglied: 114757
114757 Apr 13, 2016 updated at 09:29:03 (UTC)
Goto Top
Zitat von @TlBERlUS:
Elegant mit Powershell so:
Und sticheln tut er auch noch -.-
Hä ??? Wie sollte ich das, wenn ich deinen Beitrag beim Schreiben meines Skriptes noch nicht gesehen hatte ..., sorry aber da hast du was falsch hineininterpretiert Tiberius.

p.s. in deinem Skript fehlt noch die zusätzliche Zeile mit der REF-Nummer über jedem Textabschnitt.
Member: Menorax
Menorax Apr 13, 2016 at 09:39:24 (UTC)
Goto Top
Hallo Tiberius,

vielen Dank für deine Unterstützung.
Ich habe dein Script bei mir ausprobiert, es läuft leider nicht mit dem gewünschten Ergebnis durch.
Da ich noch keine Erfahrung mit Powershell habe, kann ich auch nicht sagen warum.

VG
Menorax
Member: Menorax
Menorax Apr 13, 2016 at 09:40:55 (UTC)
Goto Top
Zitat von @114757:

Elegant mit Powershell so:
> $quelle = 'c:\quelle'  
> $ziel = 'c:\ziel'  
> gci $quelle -Filter *.txt | group {[regex]::match($_.Basename,'(\d+)\d{4}$').Groups[1].Value} | %{  
>     $d = $_.Name
>     $_.Group | %{
>         $refnum = [regex]::match($_.Basename,'^(.*?)(\d+)$').Groups[1].Value  
>         @("Referenznummer: $refnum" ,(gc $_.Fullname)) | Add-Content "$ziel\$d.txt"  
>     }
> }
> 
Gruß jodel32

Hallo Jodel,

auch dir vielen lieben Dank.
Dein Script funktioniert wunderbar. Alle Daten werden richtig ausgelesen und die neuen Dateien erstellt.

Viele Grüße
Menorax
Member: Menorax
Menorax Apr 13, 2016 at 09:43:04 (UTC)
Goto Top
Rein zu meinem Interesse.
Ich weiß, die Powershell ist wesentlich mächtiger als Batch. Wie schon vorher erwähnt, habe ich mit Powershell noch nicht gearbeitet.

Gibt es unter Batch keine Möglichkeit zum selben Ergebnis zu kommen?

VG
Menorax
Mitglied: 114757
Solution 114757 Apr 13, 2016 updated at 10:19:21 (UTC)
Goto Top
Zitat von @Menorax:
Gibt es unter Batch keine Möglichkeit zum selben Ergebnis zu kommen?
Doch das geht natürlich auch

Ungetestet, da gerade unterwegs, etwa so
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "quelle=C:\quelle"  
set "ziel=C:\ziel"  
for %%a in ("%quelle%\*.txt") do @(  
     set "name=%%~na"  
     set "fdate=!name:~20,6!"  
     >>"%ziel%\!fdate!.txt" (  
         echo Referenznummmer: !name:~0,-10!
         type "%%a"  
     )
)
Member: Menorax
Menorax Apr 13, 2016 at 12:41:59 (UTC)
Goto Top
Zitat von @114757:

Zitat von @Menorax:
Gibt es unter Batch keine Möglichkeit zum selben Ergebnis zu kommen?
Doch das geht natürlich auch

Ungetestet, da gerade unterwegs, etwa so
> @echo off & setlocal ENABLEDELAYEDEXPANSION
> set "quelle=C:\quelle"  
> set "ziel=C:\ziel"  
> for %%a in ("%quelle%\*.txt") do @(  
>      set "name=%%~na"  
>      set "fdate=!name:~20,6!"  
>      >>"%ziel%\!fdate!.txt" (  
>          echo Referenznummmer: !name:~0,-10!
>          type "%%a"  
>      )
> )
> 


Danke Jodel, es funktioniert einwandfrei.

Vielen Dank auch nochmal an alle, die sich meiner Problematik angenommen haben face-smile