Powershell Dateiinhalt mit Substring Anfang und Ende ändern und wieder speichern
Guten Tag zusammen,
Ich bin noch Neuling was Powershell angeht. Verusche jedoch mein bestes. Nach Stunden mit googlen und lesen stelle ich meine Frage hier.
Ich habe eine Datei die hat folgenden Inhalt:
03400.600_0011_ HA_Text nun möchte ich erreichen, dass von links her 14 Zeichen stehen bleiben und der Rest abgeschnitten wird.
Das gleiche mit 03400.600_0011_0123_BG_Text mit den 19 Zeichen von links
Das die Datei eingelsen wird habe ich hinbekommen. Was ich nicht verstehe wie ich dazu komme, dass der ganze Datei Inhalt Zeile für Zeile geprüft wird und die Substringfunktion ausgeführt wird.
mir die geänderten Zeilen anzeigt und dan wieder in die Datei schreibt.
Würde mich über Unterstützung freuen.
Grüsse
walker950
Ich bin noch Neuling was Powershell angeht. Verusche jedoch mein bestes. Nach Stunden mit googlen und lesen stelle ich meine Frage hier.
Ich habe eine Datei die hat folgenden Inhalt:
03400.600_0011_ HA_Text nun möchte ich erreichen, dass von links her 14 Zeichen stehen bleiben und der Rest abgeschnitten wird.
Das gleiche mit 03400.600_0011_0123_BG_Text mit den 19 Zeichen von links
Das die Datei eingelsen wird habe ich hinbekommen. Was ich nicht verstehe wie ich dazu komme, dass der ganze Datei Inhalt Zeile für Zeile geprüft wird und die Substringfunktion ausgeführt wird.
mir die geänderten Zeilen anzeigt und dan wieder in die Datei schreibt.
$DateiPfad = 'Z:\Dokumente\test.txt'
# Get-Content liest eine Texdatei Zeile fü Zeile ein
# in der Variablen $Zeilen steht deshalb eine Liste von Zeilen (Array)
$Zeilen = Get-Content -Path $DateiPfad
# Zeilen Zähler, wird nur gebraucht um die erste Zeile zu erkennen
$ZeilenZähler = 1
# jede Zeile abarbeiten
foreach($Zeile in $Zeilen)
{
# Hier findet die Veränderung des Dateiinhalts statt.
$Substring "1","19"
}
Würde mich über Unterstützung freuen.
Grüsse
walker950
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 550764
Url: https://administrator.de/forum/powershell-dateiinhalt-mit-substring-anfang-und-ende-aendern-und-wieder-speichern-550764.html
Ausgedruckt am: 12.05.2025 um 23:05 Uhr
8 Kommentare
Neuester Kommentar

Da gibt's viele mögliche Varianten
oder
oder
oder
usw. macht alles das gleiche, such dir was davon aus was dir am besten passt.
$DateiPfad = 'Z:\Dokumente\test.txt'
(gc $dateipfad) | %{$_[0..18] -join ''} | sc $dateipfad
$DateiPfad = 'Z:\Dokumente\test.txt'
(gc $dateipfad) | %{$_ -Replace '^(.{19}).*','$1'} | sc $dateipfad
$DateiPfad = 'Z:\Dokumente\test.txt'
[regex]::matches((gc $dateipfad -raw),'(?im)^.{0,19}').Value | sc $dateipfad
$DateiPfad = 'Z:\Dokumente\test.txt'
(gc $dateipfad) | %{
if ($_.Length -ge 19){
$_.Substring(0,19)
}else{
$_
}
} | sc $dateipfad

Was ist denn das Unterscheidungsmerkmal der beiden Formen? Die Länge ist klar aber an welchem eindeutigen Muster lässig sich erkennen was welches Format ist, das geht aus deinen Beispielen leider nicht ganz eindeutig hervor. Sind es z.B. nur Zahlen Unterstriche und Punkte oder kommen dann da auch noch andere Varianten mit Buchstaben oder sonstigen Sonderzeichen?
Mit etwas Regex ist das Unterscheiden dann kein Thema.
Mit etwas Regex ist das Unterscheiden dann kein Thema.

Hier ein Beispiel so wie ich interpretiert habe
https://tio.run/##jY9Ni8IwFEX3@RUPKTRBLeloLQpSBRezdDG48SNE@zSFiJK8Yhfz32 ...
https://tio.run/##jY9Ni8IwFEX3@RUPKTRBLeloLQpSBRezdDG48SNE@zSFiJK8Yhfz32 ...
# Dateipfad
$DateiPfad = 'z:\Dokumente\test.txt'
# Teile extrahieren
$result = [regex]::matches((gc $dateipfad -raw),'(?im)^\d+\.\d+_\d+(_\d+)?(?=_)').Value
# Ausgabe auf die Konsole
$result
# Dateiausgabe
$result | sc $dateipfad

Zitat von @walker950:
Hallo vibrations
Ja genau so soll es am Enden sein.
Im Code sind aktuell 14 und 19 Zeichen von links eingestellt.
Nein ist es nicht, das ist ein Regular Expressions String der deine zwei Muster automatisch anhand des Musters erkenntHallo vibrations
Ja genau so soll es am Enden sein.
Im Code sind aktuell 14 und 19 Zeichen von links eingestellt.
Sollte nun aber andere Werte eingegebn werden wie kann ich das im Code File ändern?
Den Regex an deine Gegebenheiten anpassen.Input:
03400.600_0011_0001_HEA Zuerich
03400.600_0012_0002_AZ Bern
03400.600_0013_PIP Lausanne
03400.600_0014_DC Fribourg
03400.600_0015_0124_MUM Zuerich
03400.600_0014_GAR Zuerich
Output:
03400.600_0011_0001
03400.600_0012_0002
03400.600_0013
03400.600_0014
03400.600_0015_0124
03400.600_0014
Genau das macht der Code oben schon. Guckst du03400.600_0011_0001_HEA Zuerich
03400.600_0012_0002_AZ Bern
03400.600_0013_PIP Lausanne
03400.600_0014_DC Fribourg
03400.600_0015_0124_MUM Zuerich
03400.600_0014_GAR Zuerich
Output:
03400.600_0011_0001
03400.600_0012_0002
03400.600_0013
03400.600_0014
03400.600_0015_0124
03400.600_0014
https://tio.run/##bY9La4NAFIX3/opLEBxJI2NiuwgEY5u@IAEptIs07TDVGx2YaJgHyS ...
Danke und Grüsse
walker950
P S hast du mir einen Tipp, wo ich PS erlennen kann?
RTFM ist weiterhin die nachhaltigste Methode dann lernst du es von Grund auf und verpasst auch nichts wichtiges.walker950
P S hast du mir einen Tipp, wo ich PS erlennen kann?
Viel Erfolg.
Ciao und Helau.