中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-30 23:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批量替换网页文件中的某个固定字符(经搜索论坛无答案) 查看 1,968 回复 16
楼 主 批量替换网页文件中的某个固定字符(经搜索论坛无答案) 发表于 2007-11-17 18:45 ·  中国 广东 河源 电信
中级用户
★★
积分 201
发帖 72
注册 2005-11-20 20:57
20年会员
UID 45624
状态 离线
有几百个*.htm网页文件,均含有ABCD这个固定字符,想通过批处理把这几百个网页文件的ABCD这个固定字符替换成DCBA,请问如何写?
2 发表于 2007-11-17 18:52 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
18年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
sed "s/ABCD/DCBA/g" *.html
3 发表于 2007-11-17 21:00 ·  中国 广东 河源 电信
中级用户
★★
积分 201
发帖 72
注册 2005-11-20 20:57
20年会员
UID 45624
状态 离线
谢谢楼上兄弟。正确的写法应该是:sed -i "s/ABCD/DCBA/g" *.html
但通过Sed处理后生成另外一个文件sedDOSSUX 而不是原来的html文件了。
请问各位还有什么好方法,允许使用第三方工具。
另:刚用change来替换,但速度比较慢,而且替换后的文件名变成了大写。

[ Last edited by cain on 2007-11-17 at 09:07 PM ]
4 发表于 2007-11-17 22:18 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
很多例子的怎么搜索不到呢
@echo off
for /f "delims=" %%a in ('dir /s /b /a-d *.html') do (
for /f "tokens=*" %%i in ('type "%%a"') do call :slz "%%a" "%%i"
)
pause
:slz
set xxx=%~1
if not defined xxx goto:eof
set var=%~2
set "var=%var:ABCD=DCBA%"
>>"%~dpn1.tmp" echo %var%
move /y "%~dpn1.tmp" "%~1"
goto:eof
第一高手 第二高手

5 发表于 2007-11-17 23:05 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
哦忽略了要处理html都有特殊字符><的,建议还是用sed,貌似sed也会出现问题的,html特殊字符是避免不了的。至于你说的sedDOSSUX,你可以用3.05版的sed,或者ssed
第一高手 第二高手

6 发表于 2007-11-17 23:06 ·  中国 广东 河源 电信
中级用户
★★
积分 201
发帖 72
注册 2005-11-20 20:57
20年会员
UID 45624
状态 离线
谢谢fastslz。但用你的代码处理后html文件只剩下 ABCD=DCBA 这一行了。不知何做。
7 发表于 2007-11-17 23:29 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
文本替换专家 v2.6
http://www.wfsoft.com/software_info.asp?id=30030
用这个一个一个的去替换文件吧
如果这个工作经常要做,办法还是有的,那还是万无一失的办法。
第一高手 第二高手

8 发表于 2007-11-17 23:40 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Originally posted by fastslz at 2007-11-17 23:05:
哦忽略了要处理html都有特殊字符><的,建议还是用sed,貌似sed也会出现问题的,html特殊字符是避免不了的。至于你说的sedDOSSUX,你可以用3.05版的sed,或者ssed

sed 如何完成 ?
9 发表于 2007-11-17 23:47 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
18年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
@echo off
for /f "delims=" %%a in ('dir /s /b /a-d *.html') do (
sed -i "s/ABCD/DCBA/g" %%~sa
)
pause

难道是这意思?
10 发表于 2007-11-17 23:51 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by lxmxn at 2007-11-17 23:40:

sed 如何完成 ?

我也不知道,只是他3楼说过用sed的
哈哈、哪种万无一失不怕任何特殊字符的办法也是刚想到的,只是我以前没拿它用在字符替换上。
第一高手 第二高手

11 发表于 2007-11-18 01:18 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
VBS可以,不过发现如果文件是Unicode编码的就会出错
生成的新文件在原文件名前加上“str-”,位置和原文件相同,英文字符不区分大小写

Set WshShell = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

abcd = "Table"
dcba = "DCBA"

WshShell.Run "cmd /c cd.>list.txt",vbhid,True
WshShell.Run "cmd /c dir /b /s /on /a-d *.htm>>list.txt",,True

Set fl = fso.OpenTextFile("list.txt",1)
While not fl.AtEndOfStream
htmlfile = fl.ReadLine
Set fn = fso.GetFile(htmlfile)
Newname = Replace(htmlfile,fn.name,"str-" & fn.name)
Set fr = fso.OpenTextFile(htmlfile,1)
str = Replace(fr.ReadAll,abcd,dcba,1,-1,1)
Set fw = fso.CreateTextFile(Newname,2,Turn)
fw.WriteLine str
fw.Close
fr.Close
Wend
fl.Close
msgbox "OK!"


[ Last edited by zh159 on 2007-11-18 at 01:33 AM ]
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
fastslz +6 2007-11-18 01:52
cooray +2 2007-11-25 20:06
12 发表于 2007-11-18 01:57 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
ANSI编码完美解决方法~
第一高手 第二高手

13 发表于 2007-11-18 07:57 ·  中国 广东 河源 电信
中级用户
★★
积分 201
发帖 72
注册 2005-11-20 20:57
20年会员
UID 45624
状态 离线
Originally posted by fastslz at 2007-11-17 23:05:
哦忽略了要处理html都有特殊字符><的,建议还是用sed,貌似sed也会出现问题的,html特殊字符是避免不了的。至于你说的sedDOSSUX,你可以用3.05版的sed,或者ssed


请问哪有3.05版的sed或ssed下载呢,论坛上找不到呢。
14 发表于 2007-11-18 13:43 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
这样处理行不?

@echo off
for /r %%i in (*.htm) do (
for /f "delims=" %%a in ('findstr /n .* "%%i"') do (
set list=%%a
setlocal enabledelayedexpansion
set list=!list:*:=!
set list=!list:ABCD=DCBA!
echo/!list! >>"%%i.tmp"
endlocal
)
move /y "%%i.tmp" "%%i" 2>NUL
)
pause


[ Last edited by terse on 2007-11-18 at 01:48 PM ]
简单!简单!再简单!
15 发表于 2007-11-18 17:23 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我想sed可以间接的 先copy到%temp%下再>
论坛跳转: