|
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 来自 上海
状态 离线
|
|
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 来自 上海
状态 离线
|
|
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 |
|