楼 主
再问个问题,能否实现文本内容按标签替换?
发表于 2006-12-12 08:56 · 中国 浙江 杭州 电信
中级用户
★★
积分 305 发帖 85 注册 2005-05-23 00:00 21年会员 UID 39004 性别 男
状态 离线
嘿嘿,我问题好像有点多哦。
我想实现按标签替换,不知道能不能实现。
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的内容则不变
第 2 楼
发表于 2006-12-12 09:29 · 中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226 发帖 1,737 注册 2006-03-10 00:38 20年会员 UID 51697 来自 成都
状态 离线
仅仅针对你的这个示例,写了段代码,如果有更复杂的需求,请自行改动:
@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
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
第 3 楼
发表于 2006-12-12 09:44 · 中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 20年会员 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
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 ]
第 4 楼
发表于 2006-12-12 09:45 · 中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103 发帖 1,744 注册 2006-01-20 13:00 20年会员 UID 49241 性别 男 来自 甘肃.临泽
状态 离线
第 5 楼
发表于 2006-12-12 09:56 · 中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226 发帖 1,737 注册 2006-03-10 00:38 20年会员 UID 51697 来自 成都
状态 离线
没测试过的代码我轻易不会发出来的,除非是特别简单的代码。另外,我把楼主的b.txt文件名写成了b.bat,可能是这个原因造成了你测试的失败。疏忽之处,无伤大雅,就懒得改了^_^
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
第 6 楼
发表于 2006-12-12 10:24 · 中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013 发帖 718 注册 2006-02-18 07:07 20年会员 UID 50550
状态 离线
@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或者其他第三方工具/。
第 7 楼
发表于 2006-12-13 11:39 · 中国 山西 太原 电信
初级用户
★
积分 56 发帖 22 注册 2006-12-13 10:54 19年会员 UID 73399 性别 男
状态 离线
请问下setlocal enabledelayedexpansion有什么居体的含义吗,请详解下
我只知道用他可以实现用!替换%
启动或停用延缓环境变量扩展名听不懂,请通俗的解释一下!
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正