Eine Möglichkeit, die Werte einfach zu gegossen ist auf ganzzahlige:
$f = 'C:\path\to\myfnames.txt'
(Get-Content $f) | ForEach-Object { [int]$_ } | Set-Content $f
Andere Möglichkeiten sind die -replace
Operator, der @DaveSexton vorgeschlagen (ForEach-Object
isn‘ t erforderlich, da der Operator direkt auf dem Array verwendet werden kann, das Get-Content
zurückgibt):
$f = 'C:\path\to\myfnames.txt'
(Get-Content $f) -replace '^0+' | Set-Content $f
oder die TrimStart()
Methode Sie sagten, Sie versucht hatte:
$f = 'C:\path\to\myfnames.txt'
(Get-Content $f) | ForEach-Object { $_.TrimStart('0') } | Set-Content $f
Wenn Sie mindestens Powershell haben v3 Sie letztere dazu vereinfachen kann:
$f = 'C:\path\to\myfnames.txt'
(Get-Content $f).TrimStart('0') | Set-Content $f
weil seit v3 Powershell automatische Aufrollen unterstützt von Arrays, so dass Sie eine Methode für die Mitglieder eines Arrays transparent aufrufen können, indem Sie sie auf dem Array selbst aufrufen. Vor Version 3 würde dies zu einem Fehler führen, da das Array nicht abgerollt wird und das Array-Objekt selbst keine Methode TrimStart()
hat.
Randbemerkung: So oder so, wenn Sie wollen die geänderten Daten wieder auf die gleiche Datei, die Sie Get-Content
in Klammern ausgeführt werden müssen, um schreiben, so dass es liest (und schließt) die gesamte Datei vor dem Passieren Daten in die Pipeline. Andernfalls würde Set-Content
versuchen, in die Datei zu schreiben, während sie noch gelesen wird, was fehlschlagen würde.
Danke dafür! Ich war bereits im Begriff, alle von ihnen in ein Array zu legen und es zu schleifen und den Trimstart zu benutzen, aber das macht es einfacher :) –