我最近问了一个问题,关于如何在我的 CSV 媒体数据库文件上执行一个简洁的“查找和替换”任务(这是我每天在工作中必须执行的任务)。这个问题得到了回答这里如果有人对细节感兴趣的话。
我现在希望能够简单地将我的 CSV 文件拖放到桌面上的一个 droplet 上,以便快速轻松地执行“查找和替换 Notepad++”任务,这样我就可以在我不在的时候将此任务委托给更多的初级员工。
问题:
如何在 Win 7 中创建一个 droplet,对放入其中的任何 CSV 文件运行以下“查找和替换”命令?
文本:
找什么:
^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),
用。。。来代替:
$1_$2,
查看:环绕
查看:正则表达式
跑步:全部替换
我想象这可能是一个批处理脚本(或任何类型的脚本),只需将其拖放到脚本上即可接收我的 CSV 文件作为输入文件。
答案1
Windows 7 附带 PowerShell v2,它支持带有负面后视的正则表达式。
如果我解释你的正则表达式正确的做法是,您要将第二个字段前面的两个数字应用99_
到第三个字段后面,前提是还没有数字_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