Board logo

标题: 如何在INF文件不连续重复数据行第一处下插入数据 [打印本页]

作者: suntb     时间: 2008-3-8 14:14    标题: 如何在INF文件不连续重复数据行第一处下插入数据
原来开的帖子中的问题 “如何在.inf文本某两行之间插入一行数据 ”
借用HAT兄还原的Will Sort版原来的代码
再加上more转下去除符号“”的限制,已经基本解决

@echo off
set file=test.inf
set str=

for /f %%i in ('more "%file%"') do (
echo %%i >>temp.txt
if "%%i"=="%str%" echo 此处为插入的数据>>temp.txt
)

现有一新问题另开帖讨论下,如何在INF文件中存在不连续的多行重复数据,如果在其中的第一次出现的位置行下插入一行,而其他的重复数据行保持不变?
即假如test.inf内容如下时


Version_1
Version_2
Version_3


AddReg_1-1
AddReg_1-2
AddReg_1-3


DelReg_1
DelReg_2
DelReg_3


AddReg_2-1
AddReg_2-2
AddReg_2-3


AddReg_3-1
AddReg_3-2
AddReg_3-3


Strings_1
Strings_2
Strings_3

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


AddReg_1-0
AddReg_1-1
AddReg_1-2
AddReg_1-3


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

作者: suntb     时间: 2008-3-8 14:17
有的INF中数据不会重复 有的会重复

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

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

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

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

作者: terse     时间: 2008-3-8 15:35
简化一下 另编码问题 加more
@echo off
for /f "delims=" %%i in ('more test.inf') do (
>>temp.txt echo %%i
if "%%i"=="" 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 ]

作者: suntb     时间: 2008-3-8 23:57
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"=="" if not defined %%i s ...


谢谢 代码测试可行

if not defined 以前没接触过

整理了下两种插入数据方式


::在指定数据行后插入一行数据

@echo off
set file=test.inf
set tmpf=temp.txt
set str=
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

作者: suntb     时间: 2008-3-9 11:31
昨天自个琢磨了下 用了个笨办法实现同样效果

@echo off&setlocal EnableDelayedExpansion
set file=test.inf
set tmpf=temp.txt
set str=
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
)
)
)