freshman2017
Goto Top

Batch - Werte aus erster Spalte entfernen

Moin,

ich habe eine Ausgangsdatei, die mehrere Datensätze, wie im folgenden Beispiel hat:

123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;

Ich möchte die Datei gerne so bearbeiten, dass nur in der ersten Spalte der Wert "123-" entfernt wird:

Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;

Hierbei habe ich es bereits mit nachfolgendem Code versucht, jedoch ohne Erfolg:

@echo off & setlocal enableDelayedExpansion

set "txtin=C:\Users\Test\in.txt"
set "txtout=C:\Users\Test\out.txt"

for /f "delims=" %%a in (%txtin%) do (
echo !line:123-=!
) > %textout%

Kann mir hier jemand helfen?

Content-ID: 603872

Url: https://administrator.de/forum/batch-werte-aus-erster-spalte-entfernen-603872.html

Ausgedruckt am: 09.04.2025 um 01:04 Uhr

TK1987
TK1987 11.09.2020 aktualisiert um 10:41:36 Uhr
Goto Top
Moin,

@echo off
set "txtin=C:\Users\Test\in.txt"  
set "txtout=C:\Users\Test\out.txt"  

(for /f "Tokens=1,* Delims=-" %%a in (%txtin%) do echo %%b) > %txtout%  

Gruß Thomas
SlainteMhath
SlainteMhath 11.09.2020 um 10:45:12 Uhr
Goto Top
Moin,

würde ich per sed (Linux) und einer RegEx machen
RegEx:
s/^123-*//
Geht sicher auch mit Powershell oder Python o. Ä.

lg,
Slainte
freshman2017
freshman2017 11.09.2020 um 11:58:38 Uhr
Goto Top
Zitat von @TK1987:

Moin,

@echo off
> set "txtin=C:\Users\Test\in.txt"  
> set "txtout=C:\Users\Test\out.txt"  
> 
> (for /f "Tokens=1,* Delims=-" %%a in (%txtin%) do echo %%b) > %txtout%  

Gruß Thomas

Moin Thomas,

wenn ich es ausführe:

@echo off
set "txtin=C:\Users\Test\in.txt"  
set "txtout=C:\Users\Test\out.txt"  

(for /f "Tokens=1,* Delims=-" %%a in (%txtin%) do echo %%b) > %txtout%  

Erhalte ich folgende Ausgabe:

Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
ECHO ist ausgeschaltet (OFF)

Wie bekomme ich das "ECHO ist ausgeschaltet (OFF)" raus?
TK1987
Lösung TK1987 11.09.2020 um 12:15:50 Uhr
Goto Top
Zitat von @freshman2017:
Moin Thomas,

wenn ich es ausführe:

Erhalte ich folgende Ausgabe:

Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
ECHO ist ausgeschaltet (OFF)
Wie bekomme ich das "ECHO ist ausgeschaltet (OFF)" raus?
Das bekommst du, weil du am Ende %txtin% leere Zeilen hast. Dementsprechend ist die Variable %%b am Ende leer und da steht dann nur noch Echo.
Entweder die Leeren Zeilen löschen, oder echo %%b auf echo.%%b abändern, dann funktioniert es auch mit leeren Zeilen
(for /f "Tokens=1,* Delims=-" %%a in (%txtin%) do echo.%%b) > %txtout%  

Gruß Thomas
freshman2017
freshman2017 11.09.2020 um 13:04:22 Uhr
Goto Top
Vielen lieben Dank, dass bringt mich sehr weiter...jedoch habe ich gerade gemerkt, dass wenn eine Zeile in der Datei nur "Mustermann" stehen hat, dann wird diese nicht mit übernommen.

txtin:

123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;
123-Mustermann;Ja;ABC;;;;;;;;;;;;;;;

txtout:

Mustermann;Ja;ABC;;;;;;;;;;;;;;;

Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;

Gibt es da noch einen Trick, dass ich alle Daten mit übernommen bekomme?

Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
Mustermann;Ja;ABC;;;;;;;;;;;;;;;
TK1987
Lösung TK1987 11.09.2020 aktualisiert um 13:30:46 Uhr
Goto Top
Zitat von @freshman2017:
Gibt es da noch einen Trick, dass ich alle Daten mit übernommen bekomme?
Gibt es schon, aber das Problem bei Batch ist: Jeder Trick, um ein bestimmtes Problem zu umgehen, schafft nur immer wieder andere neue Probleme.

Batch ist nun mal ein toter Dinosaurier. Wirklich Problemfrei bekommst du das nur mit zeitgemäßen Sprachen wie Powershell gelöst
$txtin  = "C:\Users\Test\in.txt"  
$txtout = "C:\Users\Test\out.txt"  

(Get-Content $txtin) -Replace '^\d{3}-' | Out-File $txtout  
freshman2017
freshman2017 11.09.2020 um 13:39:46 Uhr
Goto Top
Zitat von @TK1987:

Zitat von @freshman2017:
Gibt es da noch einen Trick, dass ich alle Daten mit übernommen bekomme?
Gibt es schon, aber das Problem bei Batch ist: Jeder Trick, um ein bestimmtes Problem zu umgehen, schafft nur immer wieder andere neue Probleme.

Batch ist nun mal ein toter Dinosaurier. Wirklich Problemfrei bekommst du das nur mit zeitgemäßen Sprachen wie Powershell gelöst
$txtin  = "C:\Users\Test\in.txt"  
> $txtout = "C:\Users\Test\out.txt"  
> 
> (Get-Content $txtin) -Replace '^\d{3}-' | Out-File $txtout  


Oh, dass das mit Powershell geht wusste ich nicht... würde das gerne in ein Batch Skript einbauen, daher weiß ich, dass ich dies mit "powershell -Executionpolicy ByPass -Command" machen könnte, jedoch will das nicht klappen....:

powershell -Executionpolicy ByPass -Command^
$txtin="C:\Users\Test\in.txt"  
$txtout="C:\Users\Test\out.txt"  
(Get-Content $txtin) -Replace '^\d{3}-' ^|^ Out-File $txtout  
145916
Lösung 145916 11.09.2020 aktualisiert um 13:45:52 Uhr
Goto Top
@echo off &setlocal
set "txtin=C:\Users\Test\in.txt"  
set "txtout=C:\Users\Test\out.txt"  
powershell -EP ByPass -C "(Get-Content '%txtin%') -Replace '^\d{3}-' | Out-File '%txtout%'"  
freshman2017
freshman2017 11.09.2020 aktualisiert um 15:20:58 Uhr
Goto Top
Eine Frage ist gerade aufgekommen, wie kann ich das machen, dass ich die ersten 3 Zeichen, unabhängig ob es Zahlen sind, rausnehmen möchte?
145916
145916 11.09.2020 aktualisiert um 15:53:27 Uhr
Goto Top
Eine Frage ist gerade aufgekommen, wie kann ich das machen, dass ich die ersten 3 Zeichen, unabhängig ob es Zahlen sind, rausnehmen möchte?
Einfach den Regex anpassen
.......... -Replace '^.{3}' .............  

Danach bitte mal das hier durcharbeiten, dann kannst du für die Zukunft sowas von alloine face-wink.
Regular Expressions
TK1987
TK1987 11.09.2020 um 20:18:44 Uhr
Goto Top
Zitat von @145916:
.......... -Replace '^.{3}' .............  
Der Bindestrich muss noch mitgenommen werden, sonst rasiert er ja von allen Zeilen die ersten 3 Zeichen weg.
-Replace '^.{3}-'  

Zitat von @freshman2017:
Oh, dass das mit Powershell geht wusste ich nicht...
Alles was mit Batch geht, geht mit Powershell erst recht (nur viel besser) face-wink

Gruß Thomas
145916
Lösung 145916 11.09.2020 aktualisiert um 23:10:33 Uhr
Goto Top
Zitat von @TK1987:
Der Bindestrich muss noch mitgenommen werden, sonst rasiert er ja von allen Zeilen die ersten 3 Zeichen weg.
-Replace '^.{3}-'  

Das hatte ich mit Absicht so geschrieben weil ich ihn bei seiner Beschreibung beim Wort genommen habe

Zitat von @freshman2017:

Eine Frage ist gerade aufgekommen, wie kann ich das machen, dass ich die ersten 3 Zeichen, unabhängig ob es Zahlen sind, rausnehmen möchte?
Ansonsten hätte er präzisere Angaben machen müssen 😉. Aber er bräuchte ja nur mal 5 Minuten in o. A. Link reinschnuppern und schon hätte sich das von selbst erledigt...