Windows 7 поставляется с PowerShell v2, который поддерживает регулярные выражения с негативными взглядами.
Если я правильно интерпретирую ваш RegEx, вы хотите применить две цифры, 99_
ведущие ко 2-му полю, чтобы отследить и 3-е поле, при условии, что _99
номера еще нет. И оставьте другие строки / остаток строки как есть.
Пакетный файл, служащий целью удаления (также обрабатывающий несколько файлов):
:: 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
файл.csv перед
test,12_blah,blubb,anything test,34_blah,blu_34,doesn't matter test,56_foo,bar,nevermind
и после падения на вышеупомянутую партию.
test,12_blah,blubb_12,anything test,34_blah,blu_34,doesn't matter test,56_foo,bar_56,nevermind
Исходный файл сохраняется с дополнительным расширением .bak