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

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

原始数据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 编辑 ]

  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
复制代码
心绪平和,眼藏静谧。

TOP

写了个,没考虑闰年二月份的情况
  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 编辑 ]

TOP

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

TOP

  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
复制代码
心绪平和,眼藏静谧。

TOP

来个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
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

非常感谢,已经解决了。

TOP

返回列表