Board logo

标题: 再问个问题,能否实现文本内容按标签替换? [打印本页]

作者: yardian     时间: 2006-12-12 08:56    标题: 再问个问题,能否实现文本内容按标签替换?

嘿嘿,我问题好像有点多哦。
我想实现按标签替换,不知道能不能实现。
a.bat
:123
1a
bg
4asf
asdf
234
asdftewt
ahrey
:asdk
skajdfksa

b.txt
1a
2b
3c
4d
5e
用b.txt的内容只替换a.bat中标签123的内容,而标签asdk的内容则不变
作者: namejm     时间: 2006-12-12 09:29
  仅仅针对你的这个示例,写了段代码,如果有更复杂的需求,请自行改动:
@echo off
set flag=
echo :123>test.txt
more b.bat>>test.txt
setlocal enabledelayedexpansion
for /f "skip=1" %%i in (a.bat) do (
    set var=%%i
    if "!var:~0,1!"==":" set flag=1
    if !flag! equ 1 echo %%i>>test.txt
)
start test.txt

作者: vkill     时间: 2006-12-12 09:44
gsed 下载: http://www.vkill.net/tools.html
@echo off
cd.>>b.txt
>test.txt echo /^:123$/,/^:asdk$/c\
>>test.txt echo :123\
>>test.txt echo :asdk
gsed -f test.txt a.txt|gsed "/:123/r\b.txt"|more>test.txt
type test.txt
pause
[ Last edited by vkill on 2006-12-13 at 05:08 AM ]
作者: vkill     时间: 2006-12-12 09:45
namejm 兄,貌似不行,我试了只出现:123
作者: namejm     时间: 2006-12-12 09:56
  没测试过的代码我轻易不会发出来的,除非是特别简单的代码。另外,我把楼主的b.txt文件名写成了b.bat,可能是这个原因造成了你测试的失败。疏忽之处,无伤大雅,就懒得改了^_^
作者: 3742668     时间: 2006-12-12 10:24

@echo off
    setlocal enabledelayedexpansion

    rem 下面三个文件名自行更改,若路径包含空格注意加引号
    set file=a.bat
    set nextFile=b.txt
    set newFile=c.txt

    set num=
    set strRows=

    rem 指定过滤标号
    set "strBegan=:123"
    set "strEnd=:asdk"

    rem 获得过滤标号行号
    for /f "delims=:" %%i in ('findstr /nr "^:" %file%') do set "strRows=!strRows! %%i"

    rem 读源文件1到变量
    for /f "delims=" %%i in ('findstr .* %file%') do (
        set /a num += 1
        set "!num!=%%i"
    )

    rem 对比内容获得需要过滤的开始结束指针
    for %%i in (%strRows%) do (
        if "!%%i!" == "!strBegan!" set began=%%i
        if "!%%i!" == "!strEnd!" set end=%%i
    )

    rem 下面把3部分打印到新文件中
    set /a end -= 1
    for /l %%i in (1,1,%began%) do echo,!%%i!>%newFile%
    type %nextFile% >>%newFile%
    more +%end% %file% >>%newFile%

exit /b 0
稍做修改就可以实现比较通用的效果,不过若是涉及到复杂的文本操作的话还是建议用vbs或者其他第三方工具/。
作者: fbwolf     时间: 2006-12-13 11:39
请问下setlocal enabledelayedexpansion有什么居体的含义吗,请详解下
我只知道用他可以实现用!替换%
启动或停用延缓环境变量扩展名听不懂,请通俗的解释一下!