中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 05:07
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]批处理筛选保留文本指定内容
可打印版本  2,422 / 18
第1楼 w1314ich 发表于 2008-04-01 21:19
中级用户 发帖 119 积分 234
[已结]批处理筛选保留文本指定内容
有一个网页首页文件,改成TXT打开后,里面有很多内容,如下:

===============================================

===============================================


我想把里面以asp为后缀名的文件名保留下来(保留下来的文件名包括后缀名)其他所有的东西都不要,最后生成的结果如下:
===============================================
gywmen.asp|index.asp|xhjs1.asp|hyzj1.asp|xhxx1.asp|hydt1.asp|jlhz1.asp|pxtd1.asp|zcfg1.asp|wscy.asp|wlzwhjj.asp|wsdj.asp|qikan.asp|zddh.asp|lxwm.asp|xhxx1.asp|news.asp|wscy.asp|wscy_news.asp|yqlj.asp|hylink.asp
===============================================

请问能不能用批处理实现

[ Last edited by HAT on 2009-1-2 at 01:41 ]
第2楼 w1314ich 发表于 2008-04-01 21:42
中级用户 发帖 119 积分 234
自己顶一下~~~
第3楼 w1314ich 发表于 2008-04-01 22:24
中级用户 发帖 119 积分 234
有人能帮帮忙吗 非常感谢
第4楼 terse 发表于 2008-04-01 22:44
银牌会员 发帖 946 积分 2,404
用批处理 可怕很难 因为特殊字符
@echo off
for /f "tokens=* delims=:" %%a in ('findstr /n "\.asp" a.txt') do (
set var=%%a
setlocal enabledelayedexpansion
set var=!var:*:=!
set var=!var:*"=!
set var=!var:"= !
if not "!var!"=="" for /f "delims= " %%i in ("!var!") do if "%%~xi"==".asp" (>>bak.txt echo %%i)
endlocal
)
pause
第5楼 w1314ich 发表于 2008-04-01 23:16
中级用户 发帖 119 积分 234
<a href="news.asp?id=842" 中的news.asp不能提取出来
还有 <form name="frm_login" method="post" action="chk_login.asp">
中的chk_login.asp <form action=search.asp method=post ID="Form1" name=Form1> 中的search.asp <a href="xhxx1.asp?id=42"> 中的xhxxq.asp等被忽略了

输出的结果是
gywmen.asp
index.asp
xhjs1.asp
hyzj1.asp
xhxx1.asp
hydt1.asp
jlhz1.asp
pxtd1.asp
zcfg1.asp
wscy.asp
wlzwhjj.asp
http://www.ec315.cn/onlinets.asp
wsdj.asp
qikan.asp
admin/vote/vote_js.asp
zddh.asp
lxwm.asp
wscy.asp
jlhz1.asp
http://www.sh-ec.org.cn/yqlj.asp

[ Last edited by w1314ich on 2008-4-1 at 11:22 PM ]
第6楼 bat-zw 发表于 2008-04-01 23:19
金牌会员 发帖 1,276 积分 3,105
我搞了个把小时,只能回句太难了,很多提不出来啊,主要是情况太复杂了。
第7楼 w1314ich 发表于 2008-04-01 23:29
中级用户 发帖 119 积分 234
非常感谢 你能把刚刚批处理的注释帮我写写么 最好能详细点 谢谢
第8楼 26933062 发表于 2008-04-01 23:43
银牌会员 发帖 879 积分 2,268
苯办法,文件名中不能含有#号。
:
第9楼 terse 发表于 2008-04-01 23:45
银牌会员 发帖 946 积分 2,404
@echo off
for /f "tokens=* delims=:" %%a in ('findstr /n "\.asp" a.txt') do (
set var=%%a
setlocal enabledelayedexpansion
set var=!var:*:=!
set var=!var:*"=!
set var=!var:"= !
set var=!var:?= !
set var=!var:^>= !
set var=!var:^<= !
if not "!var!"=="" for /f "tokens=1* delims= " %%i in ("!var!") do if "%%~xi"==".asp" (>>bak.txt echo %%i) else call :lp "%%j"
endlocal
)
pause
goto :eof
:lp
for /f "tokens=1* delims= " %%i in ("%~1") do if "%%~xi"==".asp" (>>bak.txt echo %%i&goto :eof) else call :lp "%%j"
第10楼 terse 发表于 2008-04-01 23:47
银牌会员 发帖 946 积分 2,404
发了才知道有了
第11楼 ThinKing 发表于 2008-04-02 08:11
中级用户 发帖 207 积分 471
为什么不直接:呢?
第12楼 bat-zw 发表于 2008-04-02 13:32
金牌会员 发帖 1,276 积分 3,105
Originally posted by w1314ich at 2008-4-1 23:29:
非常感谢 你能把刚刚批处理的注释帮我写写么 最好能详细点 谢谢

@echo off
for /f "tokens=* delims=:" %%a in ('findstr /n "\.asp" a.txt') do (
set var=%%a
setlocal enabledelayedexpansion
set var=!var:*:=!
set var=!var:*"=!
set var=!var:"= !
set var=!var:?= !
set var=!var:^>= !
set var=!var:^<= !
if not "!var!"=="" for /f "tokens=1* delims= " %%i in ("!var!") do if "%%~xi"==".asp"

(>>bak.txt echo %%i) else call :lp "%%j"
endlocal
)
pause
goto :eof
:lp
for /f "tokens=1* delims= " %%i in ("%~1") do if "%%~xi"==".asp" (>>bak.txt echo %%i&goto

:eof) else call :lp "%%j"

 应楼主要求并尽我的能力为TERSE的这段精彩代码写下解释如下(如有错误和不到之处请谅解并指教):
 批处理首先通过第一个for循环开启变量延迟以":"为分隔符对a.txt中每段字符串中的特殊字符(:"")进行变量替换为无,同时将特殊字符(?><)替换为空格" "(是为后面的for循环中delims= 做准备工作);
 然后对替换后的这段字符串进行if判断是否为空,如不是空就进入第二个for循环又用if对以" "为分格符的第一个字符串%%i进行判断是否含有以.asp为后缀名的文件名(在这里使用了变量扩充%%~xi将变量%%i扩充到文件扩展名),如果有则将这串字符(%%i)添加输入到back.txt中,如不含有(else)则跳转到标签为lp的下一个for循环,并将%%i后所有字串符"%%j变量"传递给下一个for循环(注意在这里用双引号将%%j引起来是为了使下一个for循环中能正确识别含有空格的变量%%j);
 在最后一个for循环中其实是不断重复前一个for循环的工作直到最后一个后缀名为.asp的字符串被取出添加到back.txt中,只不过是要在这里运用%%~1去除变量的双引号扩充变量%%~1(从上一个for循环中传递过来的加了双引号的变量"%%j")。
 又是一个很难解释的过程,汗。。。。。。。。。。。。。。。

[ Last edited by zw19750516 on 2008-4-2 at 01:41 PM ]
第13楼 bjsh 发表于 2008-04-02 14:38
银牌会员 发帖 621 积分 2,000
如果是我的话, 我会用python来解析。

还算相当简单的吧, 效率当然比批处理更高。。。
第14楼 abcd 发表于 2008-04-02 14:47
银牌会员 发帖 739 积分 1,436
处理此问题,VBS更简单高效。

何必在一棵树上吊死呢?
第15楼 bat-zw 发表于 2008-04-02 14:51
金牌会员 发帖 1,276 积分 3,105
我不同意abcd的意见,我们处理这个问题是为了得到提高,不为了别的。

[ Last edited by zw19750516 on 2008-4-2 at 02:52 PM ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023