标题: [文件操作] [已解决]批处理怎样读取txt某行某字段,改名写入XML? [打印本页]
作者: meteormiao 时间: 2011-4-6 11:04 标题: [已解决]批处理怎样读取txt某行某字段,改名写入XML?
本帖最后由 meteormiao 于 2011-4-12 16:42 编辑
有个文件a.txt
需要读取它里面第二行“萨鲁发骄傲了9月10日14时说的”中的月日时的时间,
然后将文件名改为"tp年月日时.txt"(其中年4位,其他2位),并移动到b目录下
同时写入c.xml文件,格式如下:
<?xml version="1.0" encoding="utf-8" ?>
- <files>
<file year="2011" month="3" day="25" name="想来就来是" url="http://10.10.10.10/tp年月日.txt" />
</files>
之后每来新的txt文件,就在这个xml文件基础上进行file增项,逆序排列,最新项写在最上面。(其中年,月,日,文件名这四项是需要变动的)
小弟刚开始学批处理,论坛精华也看了一些,写了几段,但就是拼不出个能用的,无奈求助,请各位朋友能帮一把,谢谢了~~~14
作者: hanyeguxing 时间: 2011-4-6 11:58
1,是否每个文件的第二行都有类似的“11年9月10日”?此日期是否有具体的格式规范?
2,是否文件名应改为“11年9月10日.txt”?
3,<file year="2011" month="3" day="25" name="想来就来是" url="http://10.10.10.10/tp年月日.txt" />
中,除“tp年月日.txt”外其他部分都是固定的?
作者: meteormiao 时间: 2011-4-6 14:14
本帖最后由 meteormiao 于 2011-4-6 14:19 编辑
感谢版主提醒,发现了几处提问的小问题,现修改并回答如下:
1.每个文件第二行都有“XX月XX日XX时”(问题里写错了,没有年,例如:北京市交通台11月29日15时56分发布),统一是这个格式。
2.文件名需要改为“tpXXXXXXXXXX.TXT“(年4位,月日时各两位,不需要分)。
3.<file year="2011" month="3" day="25" name="想来就来是" url="http://10.10.10.10/tp年月日时.txt" />
中,变动的部分有:(1)year="年"
(2)monte="月"
(3)day="日"
(4)tp年月日时.txt
回答完毕
就是感觉问题有点复杂,反而无从下手了
作者: hanyeguxing 时间: 2011-4-6 14:43
3# meteormiao
1,年份从哪获取?当前日期的?文件创建日期的?
2,每个文件第二行都有“XX月XX日XX时”,那么3月2日早上8点应该是“03月02日08时”了?
3,<file year="2011" month="3" day="25" name="想来就来是" url="http://10.10.10.10/tp年月日时.txt" />
这里的 month="3" 的3是怎么成3而不是03了?去掉前面的0?
作者: meteormiao 时间: 2011-4-6 16:22
版主真是句句文在点上,汗颜啊。
1.年份取当前日期的。
2.文件中出现的时间是只保留整数位的,比如:3月2日8时,但转换文件名时,不足需进行补0操作,也就是文件名变为“tp2011030208.txt。
3.在XML中,month和day也是只保留整数位,不进行补零操作。
作者: hanyeguxing 时间: 2011-4-6 18:33
代码未测试:- @echo off&setlocal enableDelayedExpansion
- set "e=a.txt"
- set "f=c.xml"
- set "h=b"
- for /f "usebackq skip=1 tokens=1-3 delims=月日时" %%a in ("%e%") do (
- set b=%%b&set c=%%c
- call:b "%%a"
- goto:a
- )
- :a
- set a_=0%a%&set b_=0%b%&set c_=0%c%
- move "%e%" "%b%\tp%date:~0,4%%a_:~-2%%b_:~-2%%c_:~-2%.txt"
- (
- echo;^<?xml version="1.0" encoding="utf-8" ?^>
- echo;- ^<files^>
- echo;^<file year="%date:~0,4%" month="%a%" day="%b%" name="想来就来是" url="http://10.10.10.10/tp%date:~0,4%%a_:~-2%%b_:~-2%%c_:~-2%.txt" /^>
- for /f "usebackq skip=2 delims=" %%a in ("%f%") do (
- set g=%%a
- if /i "!g:~0,10!"=="<file year" echo;!g!
- )
- echo;^</files^>
- )>$tmp
- move $tmp "%f%"
- exit
- :b
- set "a=%~1"
- if "%a:~1%"=="" goto:eof
- set/a d=%a:~-2,1% 2>nul
- if "%d%"=="%a:~-2,1%" (set a=%a:~-2%) else set a=%a:~-1%
复制代码
作者: meteormiao 时间: 2011-4-7 10:07
有一个小瑕疵
move "%e%" "%b%\tp%date:~0,4%%a_:~-2%%b_:~-2%%c_:~-2%.txt"
中的%b%改为%h%就OK了。
非常感谢版主,我从这个案例中学到了很多,再次感谢~~~
作者: meteormiao 时间: 2011-4-12 16:23
实际运行中有一个问题,就是这个批处理并未对文件是否存在做判断,我每运行一次这个它就会执行一次写操作,如果目录下没有a.txt文件,也会在xml中写入一条空信息。。。
如果在变量赋值后,加入一个判断
if not exist a.txt goto:eof
这个程序就更好了,呵呵
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |