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-Key: 334542

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

Printed on: April 23, 2024 at 19:04 o'clock

Member: Friemler
Friemler Apr 08, 2017 at 14:14:34 (UTC)
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
Mitglied: 132895
Solution 132895 Apr 08, 2017 updated at 15:16:06 (UTC)
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%"  
Mitglied: 132749
132749 Apr 09, 2017, updated at Apr 11, 2017 at 12:46:27 (UTC)
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
Mitglied: 132895
Solution 132895 Apr 09, 2017, updated at Apr 10, 2017 at 11:40:39 (UTC)
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'  
Mitglied: 132749
132749 Apr 11, 2017 at 08:56:35 (UTC)
Goto Top
Moin,
leider wirft Powershell einen Fehler heraus!
powershell-fehler
Mitglied: 132895
Solution 132895 Apr 11, 2017 updated at 09:07:20 (UTC)
Goto Top
Du darfst das nicht in die Powershell pasten !! Das gehört in ein Skript! Geht hier einwandfrei!

Mehr Support => Angebot: PN