Batch file 在记事本+中查找特定数字并添加字符+;
我正在尝试使用记事本++查找有错误数字的数字集,并在其前面添加零以解决此问题 所以,我需要找到大于2位和小于6位的数字。然后加上零,使其成为6位数字 这必须在记事本++或批处理中完成,因为其他没有计算背景的人也需要运行它 我试着学习一些正则表达式,但没能想出一个好方法来填充6位数 下面是一些我需要自动执行的示例:Batch file 在记事本+中查找特定数字并添加字符+;,batch-file,notepad++,Batch File,Notepad++,我正在尝试使用记事本++查找有错误数字的数字集,并在其前面添加零以解决此问题 所以,我需要找到大于2位和小于6位的数字。然后加上零,使其成为6位数字 这必须在记事本++或批处理中完成,因为其他没有计算背景的人也需要运行它 我试着学习一些正则表达式,但没能想出一个好方法来填充6位数 下面是一些我需要自动执行的示例: 1 1 21 10121 416138 1 1 22 10122 574158 1 1 23 10123 43218 1 1 24
1 1 21 10121 416138
1 1 22 10122 574158
1 1 23 10123 43218
1 1 24 10124 58157
1 1 25 10125 5880
1 1 26 10126 127144
到
这不是一个很好的方法,但适用于数量较少的数字集。我用2150行代码测试了您的示例,几乎可以立即完成。但开始在大约100万条线上挣扎。它可以工作,但需要时间: 使用Notepad++中的搜索和替换,使用搜索模式正则表达式搜索
\b([0-9]{3,5})\b
并替换为0\1
并点击“全部替换”按钮3次。因此,每个3-5位数字都将被其自身替换为前面的0。当替换所有3次时,您要确保即使是3位数字也用3个前导零填充 再次不是一个好的方式,但为我工作 编辑:刚刚看到它必须自动完成。。。也许记事本++有一些工具可以作为脚本执行搜索和替换,但我将把这留给其他人;) 还有一个编辑:我只是无法控制自己,我必须找到它。。。我使用notepad++的宏功能记录了上述S&R的过程,并在哪里找到保存的宏 结果是:
<Macro Key="32" Shift="yes" Alt="yes" Ctrl="no" name="MyUpdater">
<Action sParam="" lParam="0" wParam="0" message="1700" type="3"/>
<Action sParam="\b([0-9]{3,5})\b" lParam="0" wParam="0" message="1601" type="3"/>
<Action sParam="" lParam="2" wParam="0" message="1625" type="3"/>
<Action sParam="0\1" lParam="0" wParam="0" message="1602" type="3"/>
<Action sParam="" lParam="768" wParam="0" message="1702" type="3"/>
<Action sParam="" lParam="1609" wParam="0" message="1701" type="3"/>
<Action sParam="" lParam="0" wParam="0" message="1700" type="3"/>
<Action sParam="\b([0-9]{3,5})\b" lParam="0" wParam="0" message="1601" type="3"/>
<Action sParam="" lParam="2" wParam="0" message="1625" type="3"/>
<Action sParam="0\1" lParam="0" wParam="0" message="1602" type="3"/>
<Action sParam="" lParam="768" wParam="0" message="1702" type="3"/>
<Action sParam="" lParam="1609" wParam="0" message="1701" type="3"/>
<Action sParam="" lParam="0" wParam="0" message="1700" type="3"/>
<Action sParam="\b([0-9]{3,5})\b" lParam="0" wParam="0" message="1601" type="3"/>
<Action sParam="" lParam="2" wParam="0" message="1625" type="3"/>
<Action sParam="0\1" lParam="0" wParam="0" message="1602" type="3"/>
<Action sParam="" lParam="768" wParam="0" message="1702" type="3"/>
<Action sParam="" lParam="1609" wParam="0" message="1701" type="3"/>
</Macro>
关闭记事本++。
转到%appdata%\Notepad++\
,用普通文本编辑器打开文件shortcuts.xml
(Notepad++会将其覆盖回正常状态),然后从上面将xml代码放在那里(那里应该已经有一个名为“Trim Trailing and Save”的宏);只需将其放在关闭标签下并保存即可。现在打开Notepadd++并单击菜单栏中的宏时,应该有一个名为“MyUpdater”的标签。当前快捷方式设置为Alt+Shift+Space,但您可以单击“宏->编辑快捷方式”来更改它 这对我来说很有效,你可以像这样将makro“导出”给其他用户 要反转此操作,您可以搜索
\b([0])
,并用空字符串替换它。请注意,您必须再次检查正则表达式!这里只需点击“全部替换”一次即可
如果还剩下什么,请随时询问:)@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filename1=%sourcedir%\q40601412.txt”
设置“outfile=%destdir%\outfile.txt”
(
对于(“%filename1%”中的/f“usebackqtokens=1-5”%%a,请执行以下操作(
集合/a列4=1000000+%%d
集合/a列5=1000000+%%e
回声%%a%%b%%c!第4列:~-6!!第5列:~-6!
)
)>“%outfile%”
后藤:EOF
您需要更改sourcedir
和destdir
的设置以适应您的环境
我使用了一个名为q40601412.txt
的文件,其中包含了用于测试的数据
生成定义为%outfile%的文件
读取文件并将其标记为令牌1..令牌5到%%a..%e
将1000000添加到最后两列中的每一列,这将在每一列中生成数字1000000..1999999
Echo
再次显示五列,%%a..%%c,以及column5
和column6
间距由您决定。由于字段都是固定长度的(1,1,2,6,6),因此在echo
行中使用空格或制表符
如果第3列可以是1位或2位,则
SET /a column3=1000000+%%c
是必需的,并且echo
!第三栏:~-2
代替%%c
这是制表符分隔的文件还是固定字段的文件?可能是
SET /a column3=1000000+%%c