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

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

Printed on: April 25, 2024 at 02:04 o'clock

Member: TK1987
TK1987 Sep 11, 2020 updated at 08:41:36 (UTC)
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
Member: SlainteMhath
SlainteMhath Sep 11, 2020 at 08:45:12 (UTC)
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
Member: freshman2017
freshman2017 Sep 11, 2020 at 09:58:38 (UTC)
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?
Member: TK1987
Solution TK1987 Sep 11, 2020 at 10:15:50 (UTC)
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
Member: freshman2017
freshman2017 Sep 11, 2020 at 11:04:22 (UTC)
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;;;;;;;;;;;;;;;
Member: TK1987
Solution TK1987 Sep 11, 2020 updated at 11:30:46 (UTC)
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  
Member: freshman2017
freshman2017 Sep 11, 2020 at 11:39:46 (UTC)
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  
Mitglied: 145916
Solution 145916 Sep 11, 2020 updated at 11:45:52 (UTC)
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%'"  
Member: freshman2017
freshman2017 Sep 11, 2020 updated at 13:20:58 (UTC)
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?
Mitglied: 145916
145916 Sep 11, 2020 updated at 13:53:27 (UTC)
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
Member: TK1987
TK1987 Sep 11, 2020 at 18:18:44 (UTC)
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
Mitglied: 145916
Solution 145916 Sep 11, 2020 updated at 21:10:33 (UTC)
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...