[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理截取字符输出到文件时为何出错?

本帖最后由 珠七七 于 2011-10-17 15:02 编辑

首先附上内容
time.txt
  1. 4:52:00
  2. 4:53:00
  3. 4:54:00
  4. 4:55:00
复制代码
1.bat
  1. for /f "delims=: tokens=1,2" %%i IN (time.txt) do echo 0%%i%%j>timey.txt
复制代码
看教程说生成的timey.txt应该是
  1. 0452
  2. 0453
  3. 0454
  4. 0455
复制代码
可是得到的内容却是:0455.是代码有问题吗?请大家指教一下.


以上问题已解决,非常感谢大家的帮助,特别是11楼的 awk ,谢谢!下面是追加问题.
首先我有两个文件name.txt和time.txt
name.txt,内容如下:
  1. 1.aa
  2. 2.bb
  3. 4.cc
  4. 5.dd
  5. 6.ee
复制代码
time.txt.内容如下:
  1. 4:52:00
  2. 4:53:00
  3. 4:54:00
  4. 4:55:00
  5. 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文件的,其他的都有.这样的话应该怎么样呢?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
土土土土土土土土土土土

回复 1# 珠七七
楼主得弄清楚“>”的含义,“>”为重定向符号,且会覆盖原文件内容,把“>”改为“>>”就行了,“>>”表示追加,并不覆盖原内容。
看得多说得多,远比不上写得多。

TOP

  1. @echo off
  2. (for /f "delims=: tokens=1,2" %%i IN (time.txt) do echo 0%%i%%j)>timey.txt
复制代码
莫求昨天无悔,但愿今日无愧。

TOP

嗯嗯,谢谢,我知道了.
土土土土土土土土土土土

TOP

再想请教一下,上述time.txt中,提取到需要的字符后,总共有4行.
  1. @echo off
  2. for /F "tokens=1,2,3 delims=- " %%i in ('date /T') do set D=%%i%%j%%k
  3. FOR /F "tokens=1,2 delims=:" %%i IN (time.txt) do set T=0%%i%%j
  4. echo 当前日期为:%d%
  5. echo 当前时间为:%t%
  6. echo 如果正确请按任意键,如果不对请关闭窗口.
  7. pause
  8. ren "1.txt" "1.aa_%d%_%t%.txt"
  9. ren "2.txt" "2.bb_%d%_%t%.txt"
  10. ren "4.txt" "4.cc_%d%_%t%.txt"
  11. 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
上面的代码应该要怎样补充呢?
土土土土土土土土土土土

TOP

回复 5# 珠七七


    不明白你的意思是补充什么内容呢?

TOP

回复 5# 珠七七
  1. @echo off
  2. set D=%date:~0,10%
  3. set D=%D:-=%
  4. set T=%time:~0,5%
  5. set T=%T::=%
  6. set T=%T: =0%
  7. echo 当前日期为:%d%
  8. echo 当前时间为:%t%
  9. echo 如果正确请按任意键,如果不对请关闭窗口.
  10. pause
  11. ren "1.txt" "1.aa_%d%_%t%.txt"
  12. ren "2.txt" "2.bb_%d%_%t%.txt"
  13. ren "4.txt" "4.cc_%d%_%t%.txt"
  14. ren "5.txt" "5.dd_%d%_%t%.txt"
复制代码

TOP

回复 7# awk
非常感谢你的帮助,可是我不要当前的时间,是要在time.txt所截取到字符的时间.
土土土土土土土土土土土

TOP

本帖最后由 珠七七 于 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)
..
这样明白了吗?
土土土土土土土土土土土

TOP

回复 9# 珠七七


请把所有的需求全部更新到顶楼
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set D=%date:~0,10%
  4. set D=%D:-=%
  5. set n=1
  6. for /f "delims=: tokens=1,2" %%a in (time.txt) do (
  7.     set T=0%%a%%b
  8.     ren "!n!.txt" "1.aa_%D%_!T!.txt"
  9.     set /a n+=1
  10. )
复制代码

TOP

回复 11# awk


    非常感谢你的帮助,代码有点错误,全部都命名为:
1.aa_20111015_0452.txt
1.aa_20111015_0453.txt
..
第二个文件应该是2.bb_20111015_0453.txt.
土土土土土土土土土土土

TOP

回复 12# 珠七七
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set D=%date:~0,10%
  4. set D=%D:-=%
  5. set n=1
  6. for /f "delims=: tokens=1,2" %%a in (time.txt) do (
  7.     set T=0%%a%%b
  8.     ren "!n!.txt" "!n!.aa_%D%_!T!.txt"
  9.     set /a n+=1
  10. )
复制代码

TOP

本帖最后由 CrLf 于 2011-10-15 21:21 编辑

考虑到兼容性,用变量偏移的笨办法获取当前日期...
  1. @echo off&setlocal enabledelayedexpansion
  2. set dt=%date:~,4%%date:~5,2%%date:~8,2%
  3. (for /f "delims=" %%a in (name.txt) do (
  4.         set /p str=
  5.         for /f "tokens=1,2 delims=:" %%b in ("!str!") do ren "%%a" "%%~a_%dt%_%%b%%c%.txt"
  6. ))<time.txt
  7. pause
复制代码

TOP

回复 14# CrLf


   谢谢你的指点,但是 这个批处理有点错误吧,提示找不到指定文件.

另外,自己从中找到的几条命令,不知道怎么把它们组合在一起,最后把文件更新为合适的文件名.
获取年月日的代码是:
  1. set dt=%date:~,4%%date:~5,2%%date:~8,2%
复制代码
从name.txt获取到前面的文件名是:
  1. for /f "delims=" %%a in (name.txt) do (set name=%%a)
复制代码
从time.txt获取到后面的文件名是:
  1. 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)呢?
土土土土土土土土土土土

TOP

返回列表