Windows 7 wird mit PowerShell v2 geliefert, das reguläre Ausdrücke mit negativen Hintergründen unterstützt.
Wenn ich Ihr RegEx richtig interpretiere, möchten Sie die zwei Ziffern, 99_
die das zweite Feld vorangehen, auch auf das dritte Feld anwenden, vorausgesetzt, es gibt noch keine _99
Nummer. Und lassen Sie die anderen Zeilen / den Rest der Zeile so wie sie sind.
Eine Batchdatei, die als Ablageziel dient (und auch mehrere Dateien verarbeitet):
:: SO_1352996.cmd @Echo off :Loop If "%~1" equ "" goto :Eof If not exist "%~1" (shift & goto :Loop) Ren "%~f1" "%~n1_Original%~x1" :: Use PowerShell as a tool to do the replace. Powershell -NoP -C "(Get-Content '%~dpn1_Original%~x1') -replace '^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),','$1_$2,' | Set-Content '%~f1' Shift Goto :Loop
file.csv vor
test,12_blah,blubb,anything test,34_blah,blu_34,doesn't matter test,56_foo,bar,nevermind
und nach dem Fallenlassen der obigen Charge.
test,12_blah,blubb_12,anything test,34_blah,blu_34,doesn't matter test,56_foo,bar_56,nevermind
Die Originaldatei wird mit der zusätzlichen Erweiterung gespeichert .bak