Board logo

标题: [文本处理] 批处理怎样获取昨天的日期并写入文件? [打印本页]

作者: tomato007    时间: 2012-3-26 03:38     标题: 批处理怎样获取昨天的日期并写入文件?

本帖最后由 pcl_test 于 2016-10-14 15:39 编辑

如题,比如说今天是2012年3月26日,请问怎样把昨天20120325写入C:\1.txt文件?
  1. for /f "tokens=1-3 delims=-./ " %%l in ('echo %date%') do (
  2. set tempmon=%%l
  3. set tempday=%%m
  4. set tempyear=%%n
  5. )
  6. set MyToday=%tempyear%%tempmon%%tempday%
  7. set /a myYeterday=%MyToday% -1
  8. echo %myYesterday%>C:\1.txt
复制代码
我上面的代码出错,得不到我要的结果,请问我错在哪里?谢谢
作者: 冷玉公子    时间: 2012-3-26 10:11

发帖请先使用论坛搜索功能,搜一下。

[批处理获取指定天数之前的日期]
http://bbs.bathome.net/thread-3330-1-1.html
作者: tomato007    时间: 2012-3-26 17:24

回复 2# 冷玉公子


    谢谢指点,不过那个帖子说的跟我要的不是一样的。
作者: apang    时间: 2012-3-26 18:37

顶楼代码第7行myYeterday应改为myYesterday,如果是3月1号,减去1天成3月0号了哦,呵呵。。。
二楼给出的代码怎么就不行呢?
  1. @echo off
  2. set "reg_pth=HKEY_CURRENT_USER\Control Panel\International"
  3. for /f "skip=4 delims= " %%a in ('reg query "%reg_pth%" /v sShortDate') do (
  4.   set RegDateOld=%%a
  5. )
  6. set RegDateOld=%RegDateOld:~-8%
  7. reg add "%reg_pth%" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
  8. call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
  9. reg add "%reg_pth%" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
  10. set/a PassDays-=1
  11. call :DaysToDate %PassDays% DstYear DstMonth DstDay
  12. echo %DstYear%%DstMonth%%DstDay%>c:\1.txt
  13. pause&goto :eof
  14. :DateToDays %yy% %mm% %dd% days
  15. setlocal ENABLEEXTENSIONS
  16. set yy=%1&set mm=%2&set dd=%3
  17. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  18. set/a dd=100%dd%%%100,mm=100%mm%%%100
  19. set/a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  20. set/a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  21. endlocal&set %4=%j%&goto :EOF
  22. :DaysToDate %days% yy mm dd
  23. setlocal ENABLEEXTENSIONS
  24. set/a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  25. set/a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  26. set/a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  27. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  28. endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
复制代码

作者: neorobin    时间: 2012-3-26 21:09

本帖最后由 neorobin 于 2012-3-26 21:15 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. > "c:\1.txt" (
  3. for /f "tokens=1-3 delims=-./ " %%l in ("!date!") do (
  4.   set /a "y=%%l,m=1%%m,d=1%%n-1,m-=^!(d-100),y-=^!(m-100),d+=^!(d-100)*(31-(^!(m-104)|^!(m-106)|^!(m-109)|^!(m-111))-^!(m-102)*(3-(^!(y%%4)&^!^!(y%%100)|^!(y%%400)))),m+=^!(m-100)*12")
  5. echo !y!!m:~-2!!d:~-2!
  6. )
复制代码
cmd 没有算昨天的功能 , 你得用详细的代码让它计算 "昨天=今天-1", 代码中要考虑: 今天是1号, 大小月, 平闰年, 2月各方面的问题:
以下有些参考测试日期, 如果这些日期都能得到正确的结果, 基本上不会有什么问题了.
2012/03/25
2012/03/01
2011/03/01
2000/03/01
2012/01/01
2012/01/02
2000/05/01
2000/07/01
作者: find    时间: 2012-3-26 21:40

回复 4# apang


因为人家要写入C:\1.txt文件
初学者一般都是这样样子啦
作者: batman    时间: 2012-3-27 08:24

另类一点的:
  1. @echo off
  2. if "%1" neq "" goto next
  3. mshta vbscript:createobject("wscript.shell").run("%~fs0 "^&now()-1,1,0)(window.close)
  4. goto :eof
  5. :next
  6. echo %1>a.txt
  7. start a.txt
复制代码

作者: tomato007    时间: 2012-3-27 16:55

回复 4# apang
谢谢指点,可以得到我要的结果,但是代码太长了,水平有限,看不太明白。
作者: tomato007    时间: 2012-3-27 16:57

回复 5# neorobin


    十分感谢,但我用今天的日期试,得到的结果是“32711”,是不是我的日期的格式要改啊?
作者: neorobin    时间: 2012-3-27 18:31

回复 9# tomato007


    类似这样的格式就可以: yyyy-MM-dd
可以直接运行:
reg add "HKCU\Control Panel\International" /f /v sShortDate /t reg_sz /d yyyy-MM-dd
作者: find    时间: 2012-3-27 19:34

http://www.bathome.net/thread-3328-1-1.html




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