Board logo

标题: 批量替换网页文件中的某个固定字符(经搜索论坛无答案) [打印本页]

作者: cain     时间: 2007-11-17 18:45    标题: 批量替换网页文件中的某个固定字符(经搜索论坛无答案)
有几百个*.htm网页文件,均含有ABCD这个固定字符,想通过批处理把这几百个网页文件的ABCD这个固定字符替换成DCBA,请问如何写?

作者: junchen2     时间: 2007-11-17 18:52
sed "s/ABCD/DCBA/g" *.html

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

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

作者: fastslz     时间: 2007-11-17 22:18
很多例子的怎么搜索不到呢
@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

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

作者: cain     时间: 2007-11-17 23:06
谢谢fastslz。但用你的代码处理后html文件只剩下 ABCD=DCBA 这一行了。不知何做。

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

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

sed 如何完成 ?

作者: junchen2     时间: 2007-11-17 23:47
@echo off
for /f "delims=" %%a in ('dir /s /b /a-d *.html') do (
sed -i "s/ABCD/DCBA/g" %%~sa
)
pause

难道是这意思?

作者: fastslz     时间: 2007-11-17 23:51
Originally posted by lxmxn at 2007-11-17 23:40:

sed 如何完成 ?

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

作者: zh159     时间: 2007-11-18 01:18
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 ]

作者: fastslz     时间: 2007-11-18 01:57
ANSI编码完美解决方法~

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


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

作者: terse     时间: 2007-11-18 13:43
这样处理行不?

@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 ]

作者: vkill     时间: 2007-11-18 17:23
我想sed可以间接的 先copy到%temp%下再>

作者: abshuhuhuhu     时间: 2007-11-18 17:27
建议用ultraedit 一类的,

然后打开一堆文件,批量替换。

还可以用ultraedit调用自己的宏。

当然你也可以用bat调用ultraedit(它可以再调用自己的宏)。。。。

作者: cooray     时间: 2007-11-25 20:05
ASCII完美解决方案,好强,正需要呢^_^