中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批量替换网页文件中的某个固定字符(经搜索论坛无答案)
« [1] [2] »
作者:
标题: 批量替换网页文件中的某个固定字符(经搜索论坛无答案) 上一主题 | 下一主题
cain
中级用户





积分 201
发帖 72
注册 2005-11-20
状态 离线
『楼 主』:  批量替换网页文件中的某个固定字符(经搜索论坛无答案)

有几百个*.htm网页文件,均含有ABCD这个固定字符,想通过批处理把这几百个网页文件的ABCD这个固定字符替换成DCBA,请问如何写?

2007-11-17 18:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 2 楼』:  

sed "s/ABCD/DCBA/g" *.html

2007-11-17 18:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cain
中级用户





积分 201
发帖 72
注册 2005-11-20
状态 离线
『第 3 楼』:  

谢谢楼上兄弟。正确的写法应该是:sed -i "s/ABCD/DCBA/g" *.html
但通过Sed处理后生成另外一个文件sedDOSSUX 而不是原来的html文件了。
请问各位还有什么好方法,允许使用第三方工具。
另:刚用change来替换,但速度比较慢,而且替换后的文件名变成了大写。

[ Last edited by cain on 2007-11-17 at 09:07 PM ]

2007-11-17 21:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  

很多例子的怎么搜索不到呢
@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




第一高手    第二高手

2007-11-17 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 5 楼』:  

哦忽略了要处理html都有特殊字符><的,建议还是用sed,貌似sed也会出现问题的,html特殊字符是避免不了的。至于你说的sedDOSSUX,你可以用3.05版的sed,或者ssed



第一高手    第二高手

2007-11-17 23:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cain
中级用户





积分 201
发帖 72
注册 2005-11-20
状态 离线
『第 6 楼』:  

谢谢fastslz。但用你的代码处理后html文件只剩下 ABCD=DCBA  这一行了。不知何做。

2007-11-17 23:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:  

文本替换专家 v2.6
http://www.wfsoft.com/software_info.asp?id=30030
用这个一个一个的去替换文件吧
如果这个工作经常要做,办法还是有的,那还是万无一失的办法。



第一高手    第二高手

2007-11-17 23:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by fastslz at 2007-11-17 23:05:
哦忽略了要处理html都有特殊字符><的,建议还是用sed,貌似sed也会出现问题的,html特殊字符是避免不了的。至于你说的sedDOSSUX,你可以用3.05版的sed,或者ssed

sed 如何完成 ?

2007-11-17 23:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 9 楼』:  

@echo off
for /f "delims=" %%a in ('dir /s /b /a-d *.html') do (
sed -i "s/ABCD/DCBA/g" %%~sa      
)
pause

难道是这意思?

2007-11-17 23:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by lxmxn at 2007-11-17 23:40:

sed 如何完成 ?

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



第一高手    第二高手

2007-11-17 23:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 11 楼』:  

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 ]

   此帖被 +8 点积分      点击查看详情   
评分人:【 fastslz 分数: +6  时间:2007-11-18 01:52
评分人:【 cooray 分数: +2  时间:2007-11-25 20:06




2007-11-18 01:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 12 楼』:  

ANSI编码完美解决方法~



第一高手    第二高手

2007-11-18 01:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cain
中级用户





积分 201
发帖 72
注册 2005-11-20
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by fastslz at 2007-11-17 23:05:
哦忽略了要处理html都有特殊字符><的,建议还是用sed,貌似sed也会出现问题的,html特殊字符是避免不了的。至于你说的sedDOSSUX,你可以用3.05版的sed,或者ssed

请问哪有3.05版的sed或ssed下载呢,论坛上找不到呢。

2007-11-18 07:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 14 楼』:  

这样处理行不?
@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 ]



简单!简单!再简单!
2007-11-18 13:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 15 楼』:  

我想sed可以间接的 先copy到%temp%下再>

2007-11-18 17:23
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: