标题: [文本处理] 批处理怎样获取昨天的日期并写入文件? [打印本页]
作者: tomato007 时间: 2012-3-26 03:38 标题: 批处理怎样获取昨天的日期并写入文件?
本帖最后由 pcl_test 于 2016-10-14 15:39 编辑
如题,比如说今天是2012年3月26日,请问怎样把昨天20120325写入C:\1.txt文件?- for /f "tokens=1-3 delims=-./ " %%l in ('echo %date%') do (
- set tempmon=%%l
- set tempday=%%m
- set tempyear=%%n
- )
- set MyToday=%tempyear%%tempmon%%tempday%
- set /a myYeterday=%MyToday% -1
- 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号了哦,呵呵。。。
二楼给出的代码怎么就不行呢?- @echo off
- set "reg_pth=HKEY_CURRENT_USER\Control Panel\International"
- for /f "skip=4 delims= " %%a in ('reg query "%reg_pth%" /v sShortDate') do (
- set RegDateOld=%%a
- )
- set RegDateOld=%RegDateOld:~-8%
- reg add "%reg_pth%" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
- call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
- reg add "%reg_pth%" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
- set/a PassDays-=1
- call :DaysToDate %PassDays% DstYear DstMonth DstDay
- echo %DstYear%%DstMonth%%DstDay%>c:\1.txt
- pause&goto :eof
-
- :DateToDays %yy% %mm% %dd% days
- setlocal ENABLEEXTENSIONS
- set yy=%1&set mm=%2&set dd=%3
- if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
- set/a dd=100%dd%%%100,mm=100%mm%%%100
- set/a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
- set/a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
- endlocal&set %4=%j%&goto :EOF
-
- :DaysToDate %days% yy mm dd
- setlocal ENABLEEXTENSIONS
- set/a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
- 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
- set/a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
- (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
- endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
复制代码
作者: neorobin 时间: 2012-3-26 21:09
本帖最后由 neorobin 于 2012-3-26 21:15 编辑
- @echo off & setlocal enabledelayedexpansion
- > "c:\1.txt" (
- for /f "tokens=1-3 delims=-./ " %%l in ("!date!") do (
- 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")
- echo !y!!m:~-2!!d:~-2!
- )
复制代码
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
另类一点的:- @echo off
- if "%1" neq "" goto next
- mshta vbscript:createobject("wscript.shell").run("%~fs0 "^&now()-1,1,0)(window.close)
- goto :eof
- :next
- echo %1>a.txt
- 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 |