标题: [文本处理] [已解决]批处理如何在多个txt文本内容相同的行的行首添加相同的前缀/字符串? [打印本页]
作者: liht1024 时间: 2011-5-13 09:37 标题: [已解决]批处理如何在多个txt文本内容相同的行的行首添加相同的前缀/字符串?
本帖最后由 pcl_test 于 2016-7-15 10:01 编辑
有许多个文本文件,每个文件中都有如下的文字(当然并不是每个文件都包含下列完全的内容,可能会少其中几个):
Acorus_americanus
Acorus_calamus
Aethionema_cordifolium
Aethionema_grandiflorum
Agrostis_stolonifera
Amborella_trichopoda
Anomochloa_marantoidea
Anthriscus_cerefolium
Arabidopsis_thaliana
Arabis_hirsuta
Atropa_belladonna
Bambusa_oldhamii
Barbarea_verna
Brachypodium_distachyon
Buxus_microphylla
......
求一批处理,把内容替换为:
001_Acorus_americanus
002_Acorus_calamus
003_Aethionema_cordifolium
004_Aethionema_grandiflorum
005-Agrostis_stolonifera
006_Amborella_trichopoda
007_Anomochloa_marantoidea
008_Anthriscus_cerefolium
009_Arabidopsis_thaliana
010_Arabis_hirsuta
011_Atropa_belladonna
012_Bambusa_oldhamii
013_Barbarea_verna
014_Brachypodium_distachyon
015_Buxus_microphylla
......
谢谢!
补充说明要求:
1、前面所加的数字并不是行号,而是一个统一的名字,例如:如果Aethionema_cordifolium在所有文件中都有(但它所在的行是不一样的),则在每个文件中都换成004_Aethionema_grandiflorum,如果只其中的10个文件中有,则只在这有的10个文件中变成004_Aethionema_grandiflorum。
2、上面的名字都每一行的开头,后面还有文字(用空格与开头格开)。
作者: batman 时间: 2011-5-13 10:16
本帖最后由 batman 于 2011-5-13 11:39 编辑
请测试后使用:- @echo off&setlocal enabledelayedexpansion
- set "code=这里放你要替换的字符串,每个间用空格格开"
- for %%a in (%code%) do (
- set /a n+=1&set "str=000!n!"
- set "%%a=!str:~-3!_%%a"
- )
- for /r %%a in (*.txt) do (
- (for /f "usebackq delims=" %%b in ("%%a") do (
- set "str=%%b"
- for %%b in (%code%) do (
- for %%c in (!%%b!) do set "str=!str:%%b=%%c!"
- )
- echo,!str!
- ))>$
- move /y $ "%%a"
- )
复制代码
作者: hucuibai 时间: 2011-5-13 10:17
1# liht1024 - @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1* delims=: " %%a in ('findstr /n .* 1.txt') do echo 00%%a_%%b)>2.txt
- pause
复制代码
作者: wuji530 时间: 2011-5-13 10:19
本帖最后由 wuji530 于 2011-5-13 10:28 编辑
- @echo off
- @rd .\new /s /q
- md .\new
- for %%i in (*.txt) do (
- setlocal enabledelayedexpansion
- set num=0
- for /f %%j in (%%i) do (
- set /a num+=1
- echo !num!_%%j>>.\new\%%i
- )
- )
- pause
复制代码
将以上代码保存为BAT格式文件,保存在你需要处理的那些文本文档目录下(以上代码不支持带空格的文件名),支持任意个文本文件
运行后会将转换后的文本会以相同文件名保存在当前目录下 NEW 文件夹
(刚学批处理,目前只会转换成前缀是 1_ 2_ 3_ 这种的格式。 数字前面补0的方式还不会 见笑了,自己再找找如何将数字补位的方法吧)
转换后文本内容为:
1_Acorus_americanus
2_Acorus_calamus
3_Aethionema_cordifolium
4_Aethionema_grandiflorum
5_Agrostis_stolonifera
6_Amborella_trichopoda
7_Anomochloa_marantoidea
8_Anthriscus_cerefolium
9_Arabidopsis_thaliana
10_Arabis_hirsuta
11_Atropa_belladonna
12_Bambusa_oldhamii
13_Barbarea_verna
14_Brachypodium_distachyon
15_Buxus_microphylla
作者: batman 时间: 2011-5-13 10:23
本帖最后由 batman 于 2011-5-13 10:34 编辑
楼主莫非只是要添加012_这样的行号?那你这个标题就真的是太“贴切了”!
作者: liht1024 时间: 2011-5-13 11:19
batman的代码最接近我说的要求,但还有一点小问题,就是如果我要替换的字符串是20个,则所有的字符串都会在结果里重复20次(如果文件中有15个[即有15行]要替代的字符串,结果就会变成300行),只有其中一个是加上了前面的数码,其余的则是没有加上数码的。还望继续指教,谢谢!
作者: batman 时间: 2011-5-13 11:40
6# liht1024
2楼代码原有误,已修改。。。
作者: liht1024 时间: 2011-5-13 11:46
非常感谢batman,问题圆满解决,也感谢3、4楼朋友的热心。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |