标题: [已解决] 求:多个html改名的批处理
[打印本页]
作者: xswdong
时间: 2007-3-31 10:52
标题: [已解决] 求:多个html改名的批处理
在D:\文章\目录下有三百个htm文件 ,名字是1-300 想把他们改名,利用<title>公司新同事</title> 在标题里寻找如:“公司新同事”并用它命名。试了很久没能成功,请高手帮忙。先谢谢了
<html>
<head>
<title>爱在厨房</title>
就是想利用网页原代码中的:"爱在厨房"作为文件名,替换1.htm 。文件放在
d:\文章\
[
Last edited by xswdong on 2007-3-31 at 09:37 PM ]
作者: zh159
时间: 2007-3-31 11:05
提示:
for /f ......查找文件名,findstr "<title>"显示<title>一行,用for /f "tokens=1-3* delims=<>"截取需要的字符段
作者: xswdong
时间: 2007-3-31 11:36
我用for %%i in (*.htm) do type %%i|find /n "title">a.txt提取到了如 <title>公司新同事</title> 只是接下来不知如何写
作者: everest79
时间: 2007-3-31 12:43
for /f "tokens=1,2,4 delims=<>:" %a in ('findstr "<title> </title>" D:\1\*.htm') do ren "%a:%b" "%c.htm"
作者: xswdong
时间: 2007-3-31 13:10
虽然不太理解还是试了 不能运行 还是感谢zh159 和everest79
真的有这么难吗?
[
Last edited by xswdong on 2007-3-31 at 12:12 AM ]
作者: everest79
时间: 2007-3-31 13:38
不成功的提示是什么?
作者: xswdong
时间: 2007-3-31 14:21
什么提示也没有 我加pause 也一样 闪了一下就退出了
作者: xswdong
时间: 2007-3-31 14:23
什么提示都没有 我加pause也一样 闪一下就退出了
"%a:%b" 是什么意思 能解释一下吗?
作者: dikex
时间: 2007-3-31 14:37
Quote: |
Originally posted by xswdong at 2007-3-31 01:21 AM:
什么提示也没有 我加pause 也一样 闪了一下就退出了 |
|
貌似编码问题,文件的编码不是ANSI?
作者: flyinspace
时间: 2007-3-31 16:19
我还,会想心思。
呵呵。比我懒多了。
-------------------------------
好好努力学写脚本吧。。
这个东西写出来不难。。
只是调试又要花上大把时间。
另外提取出来的东西我在其他的帖子里已经有过类似的东西了。
你可以参考。
作者: flyinspace
时间: 2007-3-31 16:20
@echo off & SETLOCAL EnableDelayedExpansion
set _TxtFile=1.txt
set _OutFile=2.txt
set _GetLine=init
set _GetChar=init
:main
for /f "Tokens=* " %%i in (%_TxtFile%) do (
set _GetLine=%%i
call :READINFILE
echo ^<!_OutLine!^>
)
goto :END
:READINFILE
set ReadFlag=true
for /l %%i in (0,1,255) do (
set _GetChar=!_GetLine:~%%i,1!
if "!_GetChar!"=="" goto :EOF
if "!_GetChar!"=="<" set ReadFlag=false
if "!ReadFlag!"=="true" set _OutLine=!_OutLine!!_GetChar!
if "!_GetChar!"==">" set ReadFlag=true
)
goto :EOF
:END
pause
作者: flyinspace
时间: 2007-3-31 16:21
上面的这个批处理。可以提出<title>flyinspace</title>里的flyinspace
应该符合你的要求了。
其他的。你自己拼吧:)这样可以提高你的动手能力。
作者: bjsh
时间: 2007-3-31 23:20
flyinspace兄写的有点复杂了吧
看看这个呢; 试试行不行
Quote: |
- @echo off
- for /f %%a in ('dir /b /a D:\文章\目录\*.htm') do set "old_name=%%a" & call :re_name
- goto exit
- :re_name
- for /f "tokens=2 delims=<>" %%b in ('findstr /b "<title>" D:\文章\目录\%old_name%') do set "new_name=%%b.htm"
- move %old_name% D:\文章\
- ren D:\文章\%old_name% %new_name%
- :exit
BJSH发表于: 2007-03-31 10:26 |
|
[
Last edited by bjsh on 2007-3-31 at 11:20 AM ]
作者: bjsh
时间: 2007-3-31 23:57
想来想去还是everest79 的代码高明简洁啊;
从他那学到不少;
给他的那句话改成批处理形式的再加上转移到d:\文章就成了下面的代码了
Quote: |
- @echo off
- for /f "tokens=1,2,4 delims=<>:" %%a in ('findstr /b "<title>" D:\文章\目录\*.htm') do ren "%%a:%%b" "%%c.htm"
- move d:\文章\目录\*.htm d:\文章\
BJSH发表于: 2007-03-31 10:47 |
|
作者: slore
时间: 2007-4-1 00:17
<html>
<head>
<title>爱在厨房</title>的话,skip掉2行。。。应该比findstr /b "<title>" 它快吧
作者: bjsh
时间: 2007-4-1 00:22
Quote: |
Originally posted by slore at 2007-3-31 11:17 AM:
<html>
<head>
<title>爱在厨房</title>的话,skip掉2行。。。应该比findstr /b "<title>" 它快吧 |
|
关键 前面不见得是两行..
比如有些加了 meta 或者没加
有些习惯与 先写 script title写后面等等
其实前面写的那些代码也是有问题的
比如如果
<title>
爱在厨房
</title>
前面的代码也会出错了
[
Last edited by bjsh on 2007-3-31 at 11:23 AM ]
作者: everest79
时间: 2007-4-1 01:11
Quote: |
Originally posted by xswdong at 2007-3-31 01:23 AM:
什么提示都没有 我加pause也一样 闪一下就退出了
"%a:%b" 是什么意思 能解释一下吗? |
|
我测试了下正常呀
你在批处理中调用记得多加%
%a:%b
这个说不清楚,我给你直接举例,假如D:\1目录下有1.htm;2.htm
findstr "<title> </title>" D:\1\*.htm
执行后回显
D:\1\1.htm:<title>test1</title>
D:\1\2.htm:<title>test2</title>
再将这个结果逐行提交给for
for中定义每行使用:<>这三个字符做为字符分割,tokens=1,2,4定义分别取其中第1\2\4段给变量%a\%b\%c
那么D:\1\1.htm:<title>test1</title>分割后就是
D \1\1.htm title test1 /title
1 2 3 4 5
%a %b %c
那么%a=D %b=\1\1.htm %c=test1
后边执行的ren "%a:%b" "%c.htm"其实就是
ren "D:\1\1.htm" "test1.htm"
这里有个缺点就是不findstr不支持unicode
作者: slore
时间: 2007-4-1 02:19
你最好把文件传上来……不然情况和格式就不全了。
作者: xswdong
时间: 2007-4-1 10:33
感谢everest79提供的代码,今天运行完全正常,什么原因我也不清楚,难道重起电脑就行了,无法理解,代码效率非常高
bjsh代码试运行了一下,运行第5句是出错,findstr无法打开目录,但最后一个文件被成功改名