中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何在INF文件不连续重复数据行第一处下插入数据
作者:
标题: 如何在INF文件不连续重复数据行第一处下插入数据 上一主题 | 下一主题
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『楼 主』:  如何在INF文件不连续重复数据行第一处下插入数据

原来开的帖子中的问题 “如何在.inf文本某两行之间插入一行数据 ”
借用HAT兄还原的Will Sort版原来的代码
再加上more转下去除符号“[]”的限制,已经基本解决
@echo off
set file=test.inf
set str=[AddReg]

  for /f %%i in ('more "%file%"') do (
    echo %%i >>temp.txt
    if "%%i"=="%str%" echo 此处为插入的数据>>temp.txt
  )
现有一新问题另开帖讨论下,如何在INF文件中存在不连续的多行重复数据,如果在其中的第一次出现的位置行下插入一行,而其他的重复数据行保持不变?
即假如test.inf内容如下时

  Quote:
[Version]
Version_1
Version_2
Version_3

[AddReg]
AddReg_1-1
AddReg_1-2
AddReg_1-3

[DelReg]
DelReg_1
DelReg_2
DelReg_3

[AddReg]
AddReg_2-1
AddReg_2-2
AddReg_2-3

[AddReg]
AddReg_3-1
AddReg_3-2
AddReg_3-3

[Strings]
Strings_1
Strings_2
Strings_3

小节名[AddReg]共出现三处,如何在第一个[AddReg]下面插入一行AddReg_1-0使第一个小节内容变成如下情况,而其他的[AddReg]重复小节下面无变化?

  Quote:
[AddReg]
AddReg_1-0
AddReg_1-1
AddReg_1-2
AddReg_1-3

[ Last edited by suntb on 2008-3-8 at 02:16 PM ]

2008-3-8 14:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 2 楼』:  

有的INF中数据不会重复 有的会重复

是我对问题没考虑周全 导致一个问题分两次提问 麻烦大家了

另外一楼中原来通过的代码为了排除“[]”使用了more

是否有其他方法可以不用more就实现同样效果?

[ Last edited by suntb on 2008-3-8 at 02:18 PM ]

2008-3-8 14:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 3 楼』:  

简化一下 另编码问题 加more
@echo off
for /f "delims=" %%i in ('more test.inf') do (
>>temp.txt echo %%i
  if "%%i"=="[AddReg]" if not defined %%i set %%i=a &>>temp.txt echo AddReg_1-0
)
pause

[ Last edited by terse on 2008-3-8 at 03:55 PM ]



简单!简单!再简单!
2008-3-8 15:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by terse at 2008-3-8 15:35:
简化一下 另编码问题 加more
@echo off
for /f "delims=" %%i in ('more test.inf') do (
>>temp.txt echo %%i
  if "%%i"=="[AddReg]" if not defined %%i s ...

谢谢 代码测试可行

if not defined 以前没接触过

整理了下两种插入数据方式
::在指定数据行后插入一行数据

@echo off
set file=test.inf
set tmpf=temp.txt
set str=[AddReg]
set addstr=此处为插入的数据

:menu
echo.&echo 在每个符合条件的数据行后都插入新数据请按 Y
echo.&set /p add=只在第一个符合条件的行后插入数据请按 N   
if /i %add%==Y goto :Y
if /i %add%==N (goto :N) else (goto :error)

:Y
  for /f %%i in ('more "%file%"') do (
    echo %%i >>%tmpf%
    if "%%i"=="%str%" echo %addstr%>>%tmpf%
  )
goto :EOF

:N
for /f "delims=" %%i in ('more "%file%"') do (
>>%tmpf% echo %%i
  if "%%i"=="%str%" if not defined %%i set %%i=a &>>%tmpf% echo %addstr%
)
goto :EOF

:error
cls
echo.&echo 你的选择有误请重新按键
goto :menu


2008-3-8 23:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 5 楼』:  

昨天自个琢磨了下 用了个笨办法实现同样效果
@echo off&setlocal EnableDelayedExpansion
set file=test.inf
set tmpf=temp.txt
set str=[AddReg]
set addstr=此处为插入的数据

set a=0
  for /f %%i in ('more "%file%"') do (
    echo %%i >>%tmpf%
    if "!a!"=="0" (
      if "%%i"=="%str%" (
        echo %addstr%>>%tmpf%
        set a=1
      )
    )
  )


2008-3-9 11:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: