Недавно я задал вопрос о том, как выполнить аккуратную небольшую задачу «Найти и заменить» в моих файлах базы данных мультимедиа в формате CSV (задача, которую я должен выполнять на работе ежедневно). На вопрос ответили здесь, если кому-то интересны детали.

Теперь я хочу иметь возможность просто перетаскивать свой CSV-файл на каплю на рабочем столе, которая быстро и легко выполняет задачу «Найти и заменить Блокнот ++», поэтому я могу делегировать эту задачу большему количеству младших сотрудников, даже когда я далеко.

Вопрос:

Как создать дроплет в Win 7, который запускает следующую команду «Найти и заменить» для любого CSV-файла, добавленного в него?

Текст:

Найти то, что:

^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),

Заменить:

$1_$2,

Проверить: обернуть

Проверка: регулярное выражение

Выполнить: заменить все

Я представляю, что это может быть пакетный сценарий (или любой другой сценарий), который получит мой CSV-файл в качестве входного файла, просто перетащив его на сценарий.

1 ответ1

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .