Board logo

标题: [文本处理] 如何使用批处理将指定字符替换为日期,请指点! [打印本页]

作者: heyoug    时间: 2008-10-14 11:40     标题: 如何使用批处理将指定字符替换为日期,请指点!

原始数据a.txt(如下),
0000723752
0000380328
0000380331
0000152179
0000385197

读取A.txt中的每一行,
将前3个数字0替换为以本月1号(如:本月为10月,则数字为20081001)然后再插入数据0755
例:a.txt中的数据,把000替换成200810010755
原始数据:0000723752  修改后数据:2008100107550723752

最后在修改后的数据每行的末尾插入数据001
原始数据:0000723752  修改后数据:2008100107550723752001
将上面的数据输出到B.TXT
然后将A.TXT中的前3个数字0替换成本月2号、3号、4号一直到月底,输出到b.txt中,
附件中B.TXT是只有本月前5天的数据。

[ 本帖最后由 heyoug 于 2008-10-14 14:11 编辑 ]
作者: pusofalse    时间: 2008-10-14 14:50

  1. @echo off&setlocal enabledelayedexpansion
  2. cd.>b.txt
  3. for /l %%a in (1 1 31) do (
  4.      set "var=0%%a"
  5.      for /f "tokens=* delims=0" %%i in (a.txt) do (
  6.            echo 200810!var:~-2!07550%%i001
  7. ))>>b.txt
  8. start b.txt
复制代码

作者: huahua0919    时间: 2008-10-14 15:16

写了个,没考虑闰年二月份的情况
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=/" %%i in ('echo %date%') do (
  3. set year=%%i
  4. set month=%%j
  5. )
  6. for %%i in (1 3 5 7 8 10 12) do (if %month% equ %%i set days=31)
  7. for %%i in (4 6 9 11) do (if %month% equ %%i set days=30)
  8. if %month% equ 2 set days=29
  9. echo %days%
  10. for /l %%a in (1 1 %days%) do (
  11. set x=%%a
  12. if !x! lss 10 set x=0!x!
  13. for /f "delims=" %%i in (a.txt) do (
  14. set a=%%i
  15. set a=!a:~3!
  16. echo %year%!x!0755!a!001 >>b.txt
  17. )
  18. set a=
  19. )
  20. pause
复制代码

[ 本帖最后由 huahua0919 于 2008-10-14 15:21 编辑 ]
作者: heyoug    时间: 2008-10-14 16:15

谢谢楼上2位朋友回复,刚才做测试用的版主的,发现一个小小的问题,如果原始数据中a.txt中前面是5个0开头的整理出来后会少一位数,另外如果是其他月份该怎么设置,谢谢!
作者: pusofalse    时间: 2008-10-14 17:35

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p month=几月?
  3. for %%i in (1 3 5 7 8 10 12) do set "_%%i=31"
  4. for %%i in (4 6 9 11) do set "_%%i=30"
  5. set "_2=29"
  6. cd.>b.txt
  7. for /l %%a in (1 1 !_%month%!) do (
  8.      set "var=0%%a"
  9.      for /f "delims=" %%i in (a.txt) do (
  10.            set "str=%%i"
  11.            echo 2008!month!!var:~-2!0755!str:~3!001
  12. ))>>b.txt
  13. start b.txt
复制代码

作者: zqz0012005    时间: 2008-10-15 00:05     标题: 来个vbs吧

  1. set fso = CreateObject("Scripting.FileSystemObject")
  2. yourMon=DateValue(inputbox("下面是当前年月","请输入年月",DatePart("yyyy",Date)&"-"&DatePart("m",Date)))
  3. do while month(yourMon+i)=month(yourMon)
  4. strDate = year(yourMon+i) & String(1 and len(month(yourMon+i)), "0") & month(yourMon+i) & String(1 and len(day(yourMon+i)), "0") & day(yourMon+i)
  5. fso.OpenTextFile("b.txt",8,true).WriteLine myReplace(strDate & "0755")
  6. i=i+1
  7. loop
  8. function myReplace(str)
  9.     Set theFile = fso.OpenTextFile("a.txt")
  10.     Do While theFile.AtEndOfStream <> True
  11.         retstring = retstring & Replace(theFile.ReadLine, "000", str, 1,1,1) & "001" & vbCrLf
  12.      Loop
  13.     theFile.Close
  14. myReplace = retstring
  15. End Function
复制代码
晕 vbs返回的时间与cmd不同,对1位数不能自动在前面补0
作者: heyoug    时间: 2008-10-15 09:36

非常感谢,已经解决了。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2