标题: [文本处理] [已解决]批处理截取字符输出到文件时为何出错? [打印本页]
作者: 珠七七 时间: 2011-10-15 06:47 标题: [已解决]批处理截取字符输出到文件时为何出错?
本帖最后由 珠七七 于 2011-10-17 15:02 编辑
首先附上内容
time.txt- 4:52:00
- 4:53:00
- 4:54:00
- 4:55:00
复制代码
1.bat- for /f "delims=: tokens=1,2" %%i IN (time.txt) do echo 0%%i%%j>timey.txt
复制代码
看教程说生成的timey.txt应该是复制代码
可是得到的内容却是:0455.是代码有问题吗?请大家指教一下.
以上问题已解决,非常感谢大家的帮助,特别是11楼的 awk ,谢谢!下面是追加问题.
首先我有两个文件name.txt和time.txt
name.txt,内容如下:复制代码
time.txt.内容如下:- 4:52:00
- 4:53:00
- 4:54:00
- 4:55:00
- 4:56:00
复制代码
我的要求是另外把1.txt,2.txt,4.txt,5.txt..
重命名为:
name.txt所截取第一行的内容_当前年月日_time.txt所截取第一行的时间.txt(结果:1.aa_20111015_0452.txt)
name.txt所截取第二行的内容_当前年月日_time.txt所截取第二行的时间.txt(结果:2.bb_20111015_0453.txt)
没有3.txt文件
name.txt所截取第三行的内容_当前年月日_time.txt所截取第二行的时间.txt(结果:4.cc_20111015_0454.txt)
name.txt所截取第四行的内容_当前年月日_time.txt所截取第二行的时间.txt(结果:5.dd_20111015_0455.txt)
没有第三份txt文件的,其他的都有.这样的话应该怎么样呢?
作者: weichenxiehou 时间: 2011-10-15 08:10
回复 1# 珠七七
楼主得弄清楚“>”的含义,“>”为重定向符号,且会覆盖原文件内容,把“>”改为“>>”就行了,“>>”表示追加,并不覆盖原内容。
作者: guaiwu 时间: 2011-10-15 12:36
- @echo off
- (for /f "delims=: tokens=1,2" %%i IN (time.txt) do echo 0%%i%%j)>timey.txt
复制代码
作者: 珠七七 时间: 2011-10-15 12:41
嗯嗯,谢谢,我知道了.
作者: 珠七七 时间: 2011-10-15 13:32
再想请教一下,上述time.txt中,提取到需要的字符后,总共有4行.- @echo off
- for /F "tokens=1,2,3 delims=- " %%i in ('date /T') do set D=%%i%%j%%k
- FOR /F "tokens=1,2 delims=:" %%i IN (time.txt) do set T=0%%i%%j
- echo 当前日期为:%d%
- echo 当前时间为:%t%
- echo 如果正确请按任意键,如果不对请关闭窗口.
- pause
- ren "1.txt" "1.aa_%d%_%t%.txt"
- ren "2.txt" "2.bb_%d%_%t%.txt"
- ren "4.txt" "4.cc_%d%_%t%.txt"
- ren "5.txt" "5.dd_%d%_%t%.txt"
复制代码
重命名后得出的结果是:
1.aa_20111015_0452.txt
2.bb_20111015_0453.txt
3.cc_20111015_0454.txt
4.dd_20111015_0455.txt
上面的代码应该要怎样补充呢?
作者: CrLf 时间: 2011-10-15 16:33
回复 5# 珠七七
不明白你的意思是补充什么内容呢?
作者: awk 时间: 2011-10-15 17:52
回复 5# 珠七七 - @echo off
- set D=%date:~0,10%
- set D=%D:-=%
- set T=%time:~0,5%
- set T=%T::=%
- set T=%T: =0%
- echo 当前日期为:%d%
- echo 当前时间为:%t%
- echo 如果正确请按任意键,如果不对请关闭窗口.
- pause
- ren "1.txt" "1.aa_%d%_%t%.txt"
- ren "2.txt" "2.bb_%d%_%t%.txt"
- ren "4.txt" "4.cc_%d%_%t%.txt"
- ren "5.txt" "5.dd_%d%_%t%.txt"
复制代码
作者: 珠七七 时间: 2011-10-15 18:13
回复 7# awk
非常感谢你的帮助,可是我不要当前的时间,是要在time.txt所截取到字符的时间.
作者: 珠七七 时间: 2011-10-15 18:16
本帖最后由 珠七七 于 2011-10-15 18:19 编辑
回复 6# CrLf
我只是要结果,如果大家另外设计一个批处理,我非常感谢.
我的目标是把1.txt,2.txt...重命名为:
1.aa_当前年月日_time.txt所截取第一行的时间.txt(结果:1.aa_20111015_0452.txt)
2.bb_当前年月日_time.txt所截取第二行的时间.txt(结果:2.bb_20111015_0453.txt)
..
这样明白了吗?
作者: Batcher 时间: 2011-10-15 18:21
回复 9# 珠七七
请把所有的需求全部更新到顶楼
作者: awk 时间: 2011-10-15 18:51
- @echo off
- setlocal enabledelayedexpansion
- set D=%date:~0,10%
- set D=%D:-=%
- set n=1
- for /f "delims=: tokens=1,2" %%a in (time.txt) do (
- set T=0%%a%%b
- ren "!n!.txt" "1.aa_%D%_!T!.txt"
- set /a n+=1
- )
复制代码
作者: 珠七七 时间: 2011-10-15 19:08
回复 11# awk
非常感谢你的帮助,代码有点错误,全部都命名为:
1.aa_20111015_0452.txt
1.aa_20111015_0453.txt
..
第二个文件应该是2.bb_20111015_0453.txt.
作者: awk 时间: 2011-10-15 19:56
回复 12# 珠七七 - @echo off
- setlocal enabledelayedexpansion
- set D=%date:~0,10%
- set D=%D:-=%
- set n=1
- for /f "delims=: tokens=1,2" %%a in (time.txt) do (
- set T=0%%a%%b
- ren "!n!.txt" "!n!.aa_%D%_!T!.txt"
- set /a n+=1
- )
复制代码
作者: CrLf 时间: 2011-10-15 21:07
本帖最后由 CrLf 于 2011-10-15 21:21 编辑
考虑到兼容性,用变量偏移的笨办法获取当前日期...- @echo off&setlocal enabledelayedexpansion
- set dt=%date:~,4%%date:~5,2%%date:~8,2%
- (for /f "delims=" %%a in (name.txt) do (
- set /p str=
- for /f "tokens=1,2 delims=:" %%b in ("!str!") do ren "%%a" "%%~a_%dt%_%%b%%c%.txt"
- ))<time.txt
- pause
复制代码
作者: 珠七七 时间: 2011-10-17 01:39
回复 14# CrLf
谢谢你的指点,但是 这个批处理有点错误吧,提示找不到指定文件.
另外,自己从中找到的几条命令,不知道怎么把它们组合在一起,最后把文件更新为合适的文件名.
获取年月日的代码是:- set dt=%date:~,4%%date:~5,2%%date:~8,2%
复制代码
从name.txt获取到前面的文件名是:- for /f "delims=" %%a in (name.txt) do (set name=%%a)
复制代码
从time.txt获取到后面的文件名是:- for /f "tokens=1,2 delims=:" %%b in (time.txt) do (set time=0%%b%%c)
复制代码
组合成新的文件名应该是:%name%_%dt%_%time%.txt
怎样把几条命令组合在一起呢?而且还要循环下去,直到获到到name.txt最后一行(总共有18行吧,除去3.txt,需要更改的是1至2.txt,4至19.txt)呢?
作者: 珠七七 时间: 2011-10-17 03:11
本帖最后由 珠七七 于 2011-10-17 03:22 编辑
经过深夜测试研究,修改14# CrLf 的代码,测试成功命名前面的部分,后面从time.txt获取的时间就不会改变.大家是否能给点帮助我呢?- @echo off
- setlocal enabledelayedexpansion
- set D=%date:~0,10%
- set D=%D:-=%
- set n=1
- for /f "delims=: tokens=1,2" %%a in (time.txt) do (
- set T=0%%a%%b
- for /f "delims=:" %%c in (name.txt) do (set aa=%%c
- ren "!n!.txt" "!aa!_%D%_!T!.txt"
- set /a n+=1
- ))
复制代码
非常感谢.
作者: bluewing009 时间: 2011-10-17 08:26
爪机,我就不上代码了,给你思路
findstr /n可以列出文本行号,这样,name文本也有序号了,一一对应用ren即可。
作者: awk 时间: 2011-10-17 13:36
回复 16# 珠七七
13的代码有问题没?
作者: 珠七七 时间: 2011-10-17 13:55
本帖最后由 珠七七 于 2011-10-17 13:59 编辑
回复 18# awk
13楼的代码没有问题,符合我当时的要求,最新的要求我也更新在顶楼.
现在的使用16楼的代码,实践的结果表明只能获取一个文本.第二个就只能获取到最后那一行.
结果:
name.txt第一行_年月日_time.txt最后一行
name.txt第二行_年月日_time.txt最后一行
name.txt第三行_年月日_time.txt最后一行
以此类推...
现在只剩这个难点了,两个文本同时获取第N行.请问你还有办法吗?
正确的结果应该是:
name.txt第一行_年月日_time.txt最后一行
name.txt第二行_年月日_time.txt最后二行
name.txt第三行_年月日_time.txt最后三行
以此类推...
我现在有一个想法,既然不能同时获取,那就先让1.txt,2.txt...先改前面部分,变为:
name.txt第一行_年月日_.txt
name.txt第二行_年月日_.txt
....
再运行另外一个批处理,获取文件名,再在相对应的文件名后面添加time.txt里面的内容.
还在研究中...
作者: 珠七七 时间: 2011-10-17 14:06
回复 17# bluewing009
谢谢,刚学批处理,这个命令还不了解.我会学一下的.
作者: 珠七七 时间: 2011-10-17 15:01
分为两个批处理,测试成功了.
第一个- @echo off
- setlocal enabledelayedexpansion
- set D=%date:~0,10%
- set D=%D:-=%
- set n=1
- for /f "delims=:" %%c in (name.txt) do (set aa=%%c
- ren "!n!.txt" "!aa!_%D%.txt"
- set /a n+=1
- )
复制代码
第二个- @echo off
- setlocal enabledelayedexpansion
- set D=%date:~0,10%
- set D=%D:-=%
- set n=1
- for /f "delims=: tokens=1,2" %%a in (time.txt) do (
- set T=0%%a%%b
- ren "!n!.*" "!n!.*_%D%_!t!.txt"
- set /a n+=1
- )
复制代码
其实第二个" ren "!n!.*" "!n!.*_%D%_!t!.txt" "这一行不知道是什么意思,可结果却刚好与我想要的一样.
感谢大家的帮助.特别是13# awk ,因为是修改你的代码而得到的.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |