dr.bit
Goto Top

Batch zum Zeilen löschen

Hi Folks,

ich bekomme es mal wieder nicht hin. 😢

Mir fehlt einfach das Verständnis, wie ich anfangen soll. Für die Fachleute hier ist das wahrscheinlich nur ein Zweizeiler. face-smile

Ich brauche ein Batch die aus einer .ini die kompletten Zeilen mit der Nummer 20100 am Anfang jeder Zeile löscht. Es muß eine batch sein und darf kein Powershell sein.
Wie gesagt ich habe null Plan und langsam ist mir das auch etwas peinlich.

Danke im voraus.

🖖

Content-ID: 604642

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

Ausgedruckt am: 27.11.2024 um 03:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 15.09.2020 aktualisiert um 22:10:48 Uhr
Goto Top
erikro
erikro 15.09.2020 um 22:10:27 Uhr
Goto Top
Moin,

für alle, die es doch mit der PS machen wollen:
https://devblogs.microsoft.com/scripting/use-powershell-to-work-with-any ...

face-wink

Liebe Grüße

Erik
Dr.Bit
Dr.Bit 16.09.2020 um 07:30:14 Uhr
Goto Top
Danke, aber sollte schon mit Bordmitteln sein. Ist ein Win XP an einer Fertigungsmaschine. Daher auch kein powershell.

🖖
145916
145916 16.09.2020 aktualisiert um 08:19:46 Uhr
Goto Top
wahrscheinlich nur ein Zweizeiler.
Nee, das wär zu viel des Guten face-smile
findstr /blvc:"20100" datei.ini >datei_neu.ini  
Dr.Bit
Dr.Bit 16.09.2020 um 08:58:21 Uhr
Goto Top
Zitat von @145916:

> findstr /blvc:"20100" datei.txt >datei_neu.txt  
> 

Danke, das funktioniert schon recht gut, und ist ja tatsächlich sogar nur ein Einzeiler face-smile Allerdings noch nicht ganz so wie es soll. Die original Datei heißt LINIE02092020PRODUKT51154.txt wobei sich das 02092020 monatlich ändert. Also gebe ich findstr /blvc:"20100" LINIE02092020PRODUKT51154.txt >datei_neu.txt und bekomme es so wie es soll.

richtig

Da sich aber das Datum monatlich ändert, dachte ich ich wäre schlau und gebe findstr /blvc:"20100" LINIE*.txt >datei_neu.txt ein. Dann bekomme ich aber das:

falsch

Er schreibt mir also in jede Zeile den Original Dateinamen mit rein. Das soll natürlich nicht sein. War ich also doch nicht so schlau face-smile. Wie fange ich das jetzt noch ab bzw. wie setze ich für das wechselnde Datum eine Platzhalter im Script?

🖖
145916
Lösung 145916 16.09.2020 aktualisiert um 09:12:36 Uhr
Goto Top
Hätte man ja eigentlich auch gleich in den ersten Post schreiben können ... aber et trröppelt halt mal wieder so rein, ist ja nix neues hier.
Bidde, auch das ist n' Einzeiler
for %%a in ("d:\Ordner\*.ini") do findstr /blvc:"20100" "%%a" >"%%~na_neu.ini"  
Dr.Bit
Dr.Bit 16.09.2020 um 10:09:10 Uhr
Goto Top
Zitat von @145916:

Hätte man ja eigentlich auch gleich in den ersten Post schreiben können ... aber et trröppelt halt mal wieder so rein, ist ja nix neues hier.
Bidde, auch das ist n' Einzeiler
> for %%a in ("d:\Ordner\*.ini") do findstr /blvc:"20100" "%%a" >"%%~na_neu.ini"  
> 
Danke, hat super geklappt, einzig, daß er einen anderen Dateinamen nimmt ist nicht so schön aber für die Funktion unerheblich.

🖖
miniversum
miniversum 16.09.2020 um 15:42:40 Uhr
Goto Top
Hallo,

na du kannst ja dann die alte Datei löschen (oder umbenennen) und der neuen Datei den Namen der original Datei geben ...

Gruß
...
erikro
erikro 16.09.2020 um 20:21:01 Uhr
Goto Top
Moin,

Zitat von @miniversum:
na du kannst ja dann die alte Datei löschen (oder umbenennen) und der neuen Datei den Namen der original Datei geben ...

Dann hätten wir einen Vierzeiler:

for %%a in ("d:\Ordner\*.ini") do (  
   findstr /blvc:"20100" "%%a" >"%%~na_neu.ini"  
   del /f "%%a"  
   rename "%%~na_neu.ini" "%%a"  
)

hth

Erik
Dr.Bit
Dr.Bit 17.09.2020 um 08:28:32 Uhr
Goto Top
Zitat von @miniversum:

Hallo,

na du kannst ja dann die alte Datei löschen (oder umbenennen) und der neuen Datei den Namen der original Datei geben ...

Gruß
...

Dann kann ich Datei auch gleich von Hand editieren, wenn ich sie sowieso anfassen muß. Das Script läuft übrigens automatisiert. Der Unterstrich wird bei der Auswertung scheinbar ignoriert. Also alles Gut. face-smile


Zitat von @erikro:

Moin,

Zitat von @miniversum:
na du kannst ja dann die alte Datei löschen (oder umbenennen) und der neuen Datei den Namen der original Datei geben ...

Dann hätten wir einen Vierzeiler:

> for %%a in ("d:\Ordner\*.ini") do (  
>    findstr /blvc:"20100" "%%a" >"%%~na_neu.ini"  
>    del /f "%%a"  
>    rename "%%~na_neu.ini" "%%a"  
> )
> 

hth

Erik

Ist ein Fünfzeiler face-smile Aber dennoch sehr brauchbar. Hab da noch ein ähnliches Problem das ich damit fast erschlagen könnte. Danke.

🖖
Lochkartenstanzer
Lochkartenstanzer 17.09.2020 aktualisiert um 08:35:57 Uhr
Goto Top
Zitat von @Dr.Bit:

Ist ein Fünfzeiler face-smile Aber dennoch sehr brauchbar. Hab da noch ein ähnliches Problem das ich damit fast erschlagen könnte. Danke.


Mit Sed ist es ein Einzeiler
for %%a in ("d:\Ordner\*.ini") do sed.exe -e "/^20100/d" -i %%a

llap

lks
Dr.Bit
Dr.Bit 17.09.2020 um 08:51:31 Uhr
Goto Top
sed.exe ist aber kein Boardmittel, wenn ich das richtig überblicke.

🖖
Lochkartenstanzer
Lochkartenstanzer 17.09.2020 aktualisiert um 09:07:36 Uhr
Goto Top
Zitat von @Dr.Bit:

sed.exe ist aber kein Boardmittel, wenn ich das richtig überblicke.


Nein, aber ein kleines Progrämmchen, das schnell geladen und eingerichtet ist (keine Installation notwendig). Spart viel Zeit.

lks

PS: wenn man WSL installiert hat, ist es ein Windows-Bordmittel face-smile
145916
145916 17.09.2020 aktualisiert um 10:50:08 Uhr
Goto Top
Oder man nimmt gleich die Powershell die ist immer mit an Bord.
ls 'd:\ordner\LINIE*.ini' -File | %{(gc $_.Fullname) | ?{$_ -notmatch '^20100'} | sc $_.Fullname}  

Gönnt Batch langsam seinen wohl verdienten Ruhestand...
miniversum
miniversum 17.09.2020 um 11:50:38 Uhr
Goto Top
Zitat von @Dr.Bit:

Zitat von @miniversum:

Hallo,

na du kannst ja dann die alte Datei löschen (oder umbenennen) und der neuen Datei den Namen der original Datei geben ...

Gruß
...

Dann kann ich Datei auch gleich von Hand editieren, wenn ich sie sowieso anfassen muß. Das Script läuft übrigens automatisiert. Der Unterstrich wird bei der Auswertung scheinbar ignoriert. Also alles Gut. face-smile


Zitat von @erikro:

Moin,

Zitat von @miniversum:
na du kannst ja dann die alte Datei löschen (oder umbenennen) und der neuen Datei den Namen der original Datei geben ...

Dann hätten wir einen Vierzeiler:

>> for %%a in ("d:\Ordner\*.ini") do (  
>>    findstr /blvc:"20100" "%%a" >"%%~na_neu.ini"  
>>    del /f "%%a"  
>>    rename "%%~na_neu.ini" "%%a"  
>> )
>> 

hth

Erik

Ist ein Fünfzeiler face-smile Aber dennoch sehr brauchbar. Hab da noch ein ähnliches Problem das ich damit fast erschlagen könnte. Danke.

🖖

Na wir wollen mal nicht so kleinlich sein. Die initiale Aufgabe geht ja in nem Einzeiler. Aber wenn es sein muss dann eben so:
for %%a in ("d:\Ordner\*.ini") do findstr /blvc:"20100" "%%a" >"%%~na_neu.ini" && del /f "%%a" && rename "%%~na_neu.ini" "%%a"
Dann hast du sogar noch da sErrorhandling mit drin face-wink

Gruß
...
Dr.Bit
Dr.Bit 17.09.2020 um 14:10:36 Uhr
Goto Top
Zitat von @145916:

Oder man nimmt gleich die Powershell die ist immer mit an Bord.
> ls 'd:\ordner\LINIE*.ini' -File | %{(gc $_.Fullname) | ?{$_ -notmatch '^20100'} | sc $_.Fullname}  
> 

Gönnt Batch langsam seinen wohl verdienten Ruhestand...

Auf Win XP?

🖖
Dr.Bit
Dr.Bit 17.09.2020 um 14:13:10 Uhr
Goto Top
Zitat von @miniversum:

Na wir wollen mal nicht so kleinlich sein. Die initiale Aufgabe geht ja in nem Einzeiler. Aber wenn es sein muss dann eben so:
for %%a in ("d:\Ordner\*.ini") do findstr /blvc:"20100" "%%a" >"%%~na_neu.ini" && del /f "%%a" && rename "%%~na_neu.ini" "%%a"
Dann hast du sogar noch da sErrorhandling mit drin face-wink

Wenn ich mal groß bin, will ich das auch können. face-smile Obwohl, ich schrumpfe ja schon wieder.😊

🖖
145916
145916 17.09.2020 aktualisiert um 14:15:56 Uhr
Goto Top
Zitat von @Dr.Bit:
Auf Win XP?
Auf XP nat. nur nach Nachrüstung des MGMT-Frameworks.
erikro
erikro 17.09.2020 um 16:35:21 Uhr
Goto Top
Zitat von @Dr.Bit:


Ist ein Fünfzeiler face-smile Aber dennoch sehr brauchbar. Hab da noch ein ähnliches Problem das ich damit fast erschlagen könnte. Danke.

Naja, eine einzelne Klammer in der Zeile, zähle ich nicht als Zeile. face-wink Gerne