标题: 如何在INF文件不连续重复数据行第一处下插入数据
[打印本页]
作者: suntb
时间: 2008-3-8 14:14
标题: 如何在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 ]
作者: 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"=="[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 ]
作者: suntb
时间: 2008-3-8 23:57
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
作者: suntb
时间: 2008-3-9 11:31
昨天自个琢磨了下 用了个笨办法实现同样效果
@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
)
)
)