中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]请教四个txt问题 删除某行 替换 插入
作者:
标题: [已结]请教四个txt问题 删除某行 替换 插入 上一主题 | 下一主题
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『楼 主』:  [已结]请教四个txt问题 删除某行 替换 插入

比如我有一批学生的txt
张三.txt
李四.txt
王二.txt

其中每一个都有一行为 "该同学的名字为**"
现在我用处理将姓名改成了学号
生成的文件为
101.txt
102.txt
103.txt

问题一
如何把所有txt中带有"该同学的名字为**"的一行删除

问题二
在每个txt最后一行加入"该同学的学号为**"
使101.txt 最后一行为 "该同学为101号"
使102.txt 最后一行为 "该同学为102号"
使103.txt 最后一行为 "该同学为103号"
(注:以前输入的txt,有的最后一行是一个回车,有的txt最后一行是空了一行还有一个回车,有的txt最后一行是有用的内容,但还没回车,也就是输入完,就直接保存了)


问题3
如何在第一行插入一行
比如在每个txt第一行前插入"市一中113班"

问题4
如要把"市一中113班"”插在指定的行,比如第3行呢

谢谢各位高手了,我在工作中遇到的一个问题,请大家帮忙分别解答

再次感谢
如果有我没表达清楚的地方 联系qq56156879

[ Last edited by HAT on 2008-11-21 at 10:21 ]

2008-11-19 04:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  

好像无法知道学号从哪里来?

2008-11-19 05:37
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 3 楼』:  

由于你没提供完整信息,就按照数字顺序作为学号
@echo off&setlocal enabledelayedexpansion
set /p insert=请输入要插"市一中113班"的行:
set n=100
for /f "delims=" %%i in ('dir/b *.txt') do (
set /a n+=1
set BeginName=%%i
  for /f "delims=" %%a in ('findstr /iv "该同学的名字为" !BeginName!') do (
   set /a m+=1
   if %insert% neq !m! (echo %%a>>!n!.txt) else (echo 市一中113班 >>!n!.txt)
  )
echo.>>!n!.txt
echo 该同学为!n!号>>!n!.txt
set m=0
)


2008-11-19 07:25
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『第 4 楼』:  

谢谢楼上朋友,是我没说清楚,
我的每个 txt前的数字就是这个学生的学号,所以不一定是100开始
比如 205.txt 则 最后加入一行 该同学为205号
请再帮一下忙

2008-11-19 22:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『第 5 楼』:  

还有一个问题是
我电脑里好几个目录,里面的文件如
张三.avi   张三.txt
李四.avi  李四.txt
王二.avi 王二.txt
......

每个txt记录了同名的视频文件的介绍
现在我打算把这些都按学号来排,从100号开始,比如上面的6个文件都改名
张三.avi   改为 101.avi  张三.txt 改为 101.txt
李四.rm  改为102.rm  李四.txt改为102.txt
王二.dat 改为 103.dat 王二.txt改为103.txt
............

第二步,查找 所有这些txt里面以前的记录改一下
凡是带有“该生姓名为”关键字的一行前面加"//"
如101.txt里“该生姓名为张三” 变为 "//该生姓名为张三"

第三步在101.txt 里最后加一行 "该生的作品为 101.avi"
         102.txt里最后加一行 "该生作品为102.rm"
         103.txt 里最后加一行 "该生作品为103.dat"


每四步,每个txt里第一行加一行 "市一中113班"

2008-11-19 23:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 6 楼』:  

问题好像还是没描述清楚,第一个问题中的,每个TXT文件名字是不由数字和汉字组成,形如  121张三.txt 的结构,然后提取121作为学号?还有学号的位数是不是固定长度(都是3位?),
你的第二个问题中的第三步是不是只要101.txt 102.xt 103.txt 在最后一行加上你所说的特定行,其他的文本文件中都不勇加这样的信息?

2008-11-19 23:41
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

回答你 5 楼的问题
未测试。。。
1、该代码会删除原文件,注意备份。!!!
2、源文件中“该生姓名为”这几个字的左边不能有空格,否则会判断错误。。
3、会忽略源文件中的空行。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir/b *.avi *.rm *.dat') do set "%%~na=%%~xa"
set /a n=100
for /f "delims=" %%a in ('dir/b *.txt') do (
   set /a n+=1
   >"%%~na_tmp.txt" echo 市一中113班
   for /f "usebackq delims=" %%b in ("%%a") do (
     set "str=%%b"
     if "!str:~0,5"=="该生姓名为" (
        >>"%%~na_tmp.txt" echo //%%b
     ) else (>>"%%~na_tmp.txt" echo %%b)
    )
    >>"%%~na_tmp.txt" echo 该生的作品为 %%~na!%%~na!
    ren "%%~na_tmp.txt" "!n!.txt"
    del /q "%%a" 2>nul
)
pause




致精致简!
2008-11-20 21:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 8 楼』:  

汗,看错题目了,没注意 视频文件也要改名。。。



致精致简!
2008-11-20 21:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『第 9 楼』:  

谢谢8楼

2008-11-20 21:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 10 楼』:  


@echo off&setlocal enabledelayedexpansion
set n=20000
set m=0
set /p insertLine=输入要插入数据的行号:
set /p insertData=输入要插入的数据,系统会自动将数据插入到指定的行:
for /f "delims=" %%i in ('dir/s/b/a-d') do (
set Video=%%i
set Video_x=%%~xi
set Video_n=%%~ni
if /i not "!Video_x!"==".KSC" (
  if /i not "!Video_x!"==".bat" (
   set/a n+=1
   
   for /f "delims=" %%a in ('type !Video_n!.KSC') do (
      set ClassInner=%%a
      set /a m+=1
      if "!ClassInner:~,19!"=="karaoke.CommonVideo" (>>!n!.KSC echo karaoke.CommonVideo := '!n!!Video_x!';)
      if %insertLine% neq !m! (>>!n!.KSC echo %%a) else (>>!n!.KSC echo %insertData% )
      
   )
set m=0
ren "%%i" "!n!!Video_x!"
del !Video_n!.KSC /q >nul 2>nul
)
)
)


   此帖被 +2 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-11-21 10:21


2008-11-20 23:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『第 11 楼』:  

先谢谢十楼了

2008-11-20 23:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『第 12 楼』:  

huahua0919
太厉害了,完美解决了

2008-11-21 00:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pigpigs
初级用户





积分 41
发帖 28
注册 2008-8-19
状态 离线
『第 13 楼』:  

高手,看了半天没看明白咋回事儿。

2008-11-21 08:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
123qaz
新手上路





积分 10
发帖 10
注册 2008-11-19
状态 离线
『第 14 楼』:  

这论坛里高手也多,好心朋友也多,淘宝收费50的人用了一天没编好的,10楼的朋友用两个晚上就编好了,我说帮他交点电话费,他也不要,几个功能就短短几行代码就成功了,真是高兴,又感激,对论坛的高手一并谢谢了,你们的付出,对菜鸟是很大的帮助

2008-11-21 22:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: