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

[文本处理] 批处理如何在txt文本每一行的行首/开头添加当月/本月除星期日外的日期

本帖最后由 pcl_test 于 2016-7-8 17:00 编辑

a.txt中的数据如下:
1234567
2345678
读取a.txt中的数据,并在数据前面加上本月的日期,(星期天除外)。
处理后的数据:
200903021234567
200903022345678
......
200903311234567
200903312345678
然后输入筛选日期范围:15,16
符合条件的:
200903151234567
200903152345678
200903161234567
200903162345678
输出到B.TXT
其他数据输出到C.txt

请问这个批处理应该怎么实现!

[ 本帖最后由 heyoug 于 2009-3-12 20:54 编辑 ]

开始
运行
cmd
echo %date% %time%
结果贴出来看看

另,从你的数据中看不出什么规律,能否多举几个例子来说明日期是按照什么规律加上去的?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

20090302                   1234567
20090302                   2345678
......
20090331                  1234567
20090331                  2345678
前面表示本月的日期  后面的是a.txt中的数据  2者组合而成,这里表示从20090302一直到20090331组合a.txt里面的数据而形成的新数据。

TOP

  若要写一个通用的代码,有两个难题需要解决:

  1、平年闰年的判断;
  2、日期与星期的换算;

  在批处理中,这两个问题处理起来是相当的麻烦。若不是跨年的计算,则难度大为降低。还请楼主说明一下要处理的年代范围,方好写代码。

  另外,本机上的日期格式也影响到具体代码的编写,这也是batcher在2楼中要你贴出 echo %date% %time% 结果的原因。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a y=%%i,m=100%%j%%100
    set/a PN2="!(y%%4)&!(!(y%%100))|!(y%%400)",PN2=28+PN2
    for /f "tokens=%m%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set d=%%i
    if %m% leq 2 set/a y-=1,m+=12
    setlocal enabledelayedexpansion
    for /l %%i in (1 1 %d%) do (
    set/a t=^(%%i+2*m+3*^(m+1^)/5+y+y/4-y/100+y/400+1^)%%7
    if %%i lss 10 (set n=0%%i)else set n=%%i
    if !t! neq 0 (
    for /f "delims=" %%j in (a.txt) do (
    set str=%%j
    call set str=%%str:!str:~,3!=%date:~,4%%date:~5,2%!n!%%001
    >>b.txt echo !str!
)))
这是某一位高手以前发给我的代码,上面能实现润月以及星期天的判断,现在想能设置个塞选范围,把符合条件的输出到b.txt  不符合条件的输出到c.txt,谢谢指点!

TOP

请高手指点一下!在线急等!

TOP

回复 5楼 的帖子

  1. @echo off
  2. for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a y=%%i,m=100%%j%%100
  3. set/a PN2="!(y%%4)&!(!(y%%100))|!(y%%400)",PN2=28+PN2
  4. for /f "tokens=%m%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set d=%%i
  5. if %m% leq 2 set/a y-=1,m+=12
  6. setlocal enabledelayedexpansion
  7. (for /l %%i in (1 1 %d%) do (
  8.   set/a t=^(%%i+2*m+3*^(m+1^)/5+y+y/4-y/100+y/400+1^)%%7
  9.   if %%i lss 10 (set n=0%%i)else set n=%%i
  10.   if !t! neq 0 (
  11.     for /f "delims=" %%j in (a.txt) do (
  12.       set str=%%j
  13.       call set str=%%str:!str:~,3!=%date:~,4%%date:~5,2%!n!%%001
  14.       echo.!str!
  15.     )
  16.   )
  17. ))>b.txt
  18. echo 输入筛选日期范围(1-31):
  19. set /p BeginDate=开始日期:
  20. set /p EndDate=结束日期:
  21. (for /l %%a in (%BeginDate%,1,%EndDate%) do (
  22.   if %BeginDate% lss 10 (
  23.     findstr "%date:~,4%%date:~5,2%0%%a" b.txt
  24.   ) else (
  25.     findstr "%date:~,4%%date:~5,2%%%a" b.txt
  26.   )
  27. ))>yes.txt
  28. findstr /v /g:yes.txt b.txt>no.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 pcl_test 于 2016-7-9 01:46 编辑

bat+vbs
  1. '&cls&cscript -nologo -e:vbscript "%~f0"<"文本.txt"&pause&exit
  2. Set fso=CreateObject("Scripting.FileSystemObject")
  3. Set objDict = WSH.CreateObject("Scripting.Dictionary")
  4. y = year(Now)
  5. m = month(Now)
  6. d = DateAdd("d", -1, DateValue(y&"-"&m&"-1"))
  7. Do Until CLng(ym) > CLng(y&right("0"&m, 2))
  8.     d = DateAdd("d", 1, d)
  9.     ym = year(d)&right("0"&month(d), 2)
  10.     '1星期日 2星期一 3星期二 4星期三 5星期四 6星期五 7星期六
  11.     If CLng(ym) = CLng(y&right("0"&m, 2)) and Weekday(d) <> 1 Then
  12.         str = str & ym & right("0"&day(d), 2) & Chr(32)
  13.     End If
  14. Loop
  15. n = split("15,16", ",")  '提取15、16日
  16. For i=0 To UBound(n)
  17.     objDict.Add CInt(n(i)), 1
  18. Next
  19. str = split(RTrim(str), Chr(32))
  20. Do While WSH.StdIn.AtEndOfStream <> true
  21.     line = WSH.StdIn.ReadLine
  22.     For i=0 To UBound(str)
  23.         If objDict.Exists(CInt(1&right(str(i), 2))-100) Then
  24.             s1 = s1 & str(i) & line & vbCrLf
  25.         Else
  26.             s2 = s2 & str(i) & line & vbCrLf
  27.         End If
  28.     's3 = s3 & str(i) & line & vbCrLf
  29.     Next
  30. Loop
  31. WSH.echo s1
  32. 'fso.OpenTextFile("提取.txt", 2, true).Write s1
  33. 'fso.OpenTextFile("其余.txt", 2, true).Write s2
复制代码

TOP

返回列表