[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何在多个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、上面的名字都每一行的开头,后面还有文字(用空格与开头格开)。
1

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 batman 于 2011-5-13 11:39 编辑

请测试后使用:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "code=这里放你要替换的字符串,每个间用空格格开"
  3. for %%a in (%code%) do (
  4.      set /a n+=1&set "str=000!n!"
  5.      set "%%a=!str:~-3!_%%a"
  6. )
  7. for /r %%a in (*.txt)  do (
  8.      (for /f "usebackq delims=" %%b in ("%%a") do (
  9.           set "str=%%b"
  10.           for %%b in (%code%) do (
  11.                for %%c in (!%%b!) do set "str=!str:%%b=%%c!"
  12.           )
  13.           echo,!str!
  14.      ))>$
  15.      move /y $ "%%a"
  16. )
复制代码
1

评分人数

***共同提高***

TOP

1# liht1024
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=1* delims=: " %%a in ('findstr /n .* 1.txt') do echo 00%%a_%%b)>2.txt
  3. pause
复制代码

TOP

本帖最后由 wuji530 于 2011-5-13 10:28 编辑
  1. @echo off
  2. @rd .\new /s /q
  3. md .\new
  4. for %%i in (*.txt) do (
  5.         setlocal enabledelayedexpansion
  6.         set num=0
  7.         for /f %%j in (%%i) do (
  8.                 set /a num+=1
  9.                     echo !num!_%%j>>.\new\%%i
  10.         )
  11. )        
  12. 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

TOP

本帖最后由 batman 于 2011-5-13 10:34 编辑

楼主莫非只是要添加012_这样的行号?那你这个标题就真的是太“贴切了”!
***共同提高***

TOP

batman的代码最接近我说的要求,但还有一点小问题,就是如果我要替换的字符串是20个,则所有的字符串都会在结果里重复20次(如果文件中有15个[即有15行]要替代的字符串,结果就会变成300行),只有其中一个是加上了前面的数码,其余的则是没有加上数码的。还望继续指教,谢谢!

TOP

6# liht1024
2楼代码原有误,已修改。。。
***共同提高***

TOP

非常感谢batman,问题圆满解决,也感谢3、4楼朋友的热心。

TOP

返回列表