132749
Goto Top

Vorhandene TXT per Batch aktualisieren

Moin zusammen,
ich benötige Eure Hilfe um den Inhalt einer vorhandenen TXT per Batch zu aktualisieren!

So sieht meine "my.txt" derzeitig aus:

07.04.2017

Australia\DA1=031
Austria\DA1=162
Austria\DA2=162
Austria\DA3=162
Austria\DA4=162

DATUM: 28.03.2017

Australia\DA1=030
Australia\DA3=034
Australia\DA4=036
Austria\DA1=161
Austria\DA2=161
Austria\DA3=161
Austria\DA4=161
Canada\DA1=125
Canada\DA4=125


So soll meine "my.txt" aussehen wenn sie aktualisiert wurde:

07.04.2017

Australia\DA1=031
Austria\DA1=162
Austria\DA2=162
Austria\DA3=162
Austria\DA4=162

DATUM: 28.03.2017

Australia\DA3=034
Australia\DA4=036
Canada\DA1=125
Canada\DA4=125

Hinweis: new.txt (07.04.17) + old.txt (28.03.2017) = my.txt
copy /b "new.txt"+"old.txt" "my.txt"  

Ich bedanke mich für Eure Hilfe im Voraus

Gruß
kampen

Content-ID: 334542

Url: https://administrator.de/forum/vorhandene-txt-per-batch-aktualisieren-334542.html

Ausgedruckt am: 23.04.2025 um 17:04 Uhr

Friemler
Friemler 08.04.2017 um 16:14:34 Uhr
Goto Top
Hallo kampen,

Du hast diese Frage hier bereits schon einmal gestellt und hast keine für Dich hilfreiche Lösung bekommen. Evtl. liegt das daran, dass kein Mensch erraten kann/möchte, nach welchen Regeln entschieden werden soll, was unter welchen Bedingungen aus der old.txt entfernt wird. Gib dazu mal genauere Infos raus, dann kann man Dir vielleicht auch helfen.

Grüße
Friemler
132895
Lösung 132895 08.04.2017 aktualisiert um 17:16:06 Uhr
Goto Top
@echo off
::-------------
set "file=C:\ordner\my.txt"  
::-------------
set "filenew=%temp%\my_neu.txt"  
set "tmpfile=%temp%\dict.txt"  
del "%tmpfile%" >nul 2>&1  
del "%filenew%" >nul 2>&1  

>"%filenew%" (for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" "%file%"') do (  
    echo(%%b|find "=" >nul && (  
        for /f "tokens=1 delims==" %%c in ("%%b") do (  
            find "%%c" "%tmpfile%" >nul 2>&1 || (  
                echo(%%b
                echo(%%c>>"%tmpfile%"  
            )
        )
    ) || (echo(%%b)
))
move "%filenew%" "%file%"  
132749
132749 09.04.2017, aktualisiert am 11.04.2017 um 14:46:27 Uhr
Goto Top
Moin hauruck,

vielen Dank für deine Hilfe die mich ein ganzes Stück weiterbringt!
Besteht die Möglichkeit das Datum zu entfernen wenn hinter dem Datum kein Eintrag vorhanden ist?

Als Beispiel: Neues Update am 09.04.2017 erhalten!

DATUM: 09.04.2017

Australia\DA3=035
Australia\DA4=037
Canada\DA1=126
Canada\DA4=126
Australia\DA1=032


Das Ergebnis der aktualisierten TXT sieht dann so aus:

DATUM: 09.04.2017

Australia\DA3=035
Australia\DA4=037
Canada\DA1=126
Canada\DA4=126
Australia\DA1=032

Datum: 07.04.2017

Austria\DA1=162
Austria\DA2=162
Austria\DA3=162
Austria\DA4=162

DATUM: 28.03.2017 >>>> entfernbar wenn kein Eintrag hinter dem Datum vorhanden ist????


Gruß
kampen
132895
Lösung 132895 09.04.2017, aktualisiert am 10.04.2017 um 13:40:39 Uhr
Goto Top
Da fragt man sich wirklich welche Idioten sich solche Speicherkonzepte ausdenken nur damit dann andere ohne Erfahrung daran weiter basteln... Armes Deutschland kann man da nur sagen face-big-smile face-big-smile. Statt das man eine Datenbank hernimmt oder ein Aktualisierungsalgrithmus mit Regex hernimmt wird so ein Müll produziert, da stellen sich einem die Nackenhaare.
Batch ist für sowas viel zu umständlich, nimm Powershell oder VBS, das ist ja jetzt schon lahm ohne Ende.

$file = 'D:\new.txt'  
$dic = @()
[regex]::matches((gc $file -raw),'(?ism)^((DATUM:\s*)?\d{2}\.\d{2}\.\d{4})(.*?)(?=^DATUM|\z)').Captures | %{  
    $subcount = 0
    $subvalues = @(); $subvalues += "`r`n" + $_.Groups[1].Value + "`r`n"  
    $_.Groups[3].Value -split [Environment]::NewLine | ?{$_.trim() -ne ""} | %{  
        if ($_ -match '='){  
            $part = $_.Split('=')  
            if ($part -notin $dic){
                $dic += $part
                $subcount++
                $subvalues += $_
            }
        }
    }
    if ($subcount){$subvalues}
} | sc 'D:\new.txt'  
132749
132749 11.04.2017 um 10:56:35 Uhr
Goto Top
Moin,
leider wirft Powershell einen Fehler heraus!
powershell-fehler
132895
Lösung 132895 11.04.2017 aktualisiert um 11:07:20 Uhr
Goto Top
Du darfst das nicht in die Powershell pasten !! Das gehört in ein Skript! Geht hier einwandfrei!

Mehr Support => Angebot: PN