用Dos批处理取1天之前的日期
Windows CMD命令中的时间和日期处理技巧
Windows CMD命令中的时间和日期处理技巧随着计算机技术的发展,Windows操作系统已经成为了人们生活和工作中必不可少的一部分。
而在Windows系统中,CMD命令作为一种强大的工具,可以帮助我们更高效地管理和操作计算机。
在CMD命令中,时间和日期处理是一个非常重要的方面,它可以帮助我们更好地掌握时间和日期的信息,提高工作效率。
下面将介绍一些Windows CMD命令中的时间和日期处理技巧。
一、获取当前时间和日期在CMD命令中,我们可以使用"date"命令获取当前日期,使用"time"命令获取当前时间。
例如,输入"date"命令后按下回车键,即可显示当前日期。
同样地,输入"time"命令后按下回车键,即可显示当前时间。
这些命令非常简单,但是在日常工作中却非常实用。
二、格式化时间和日期在CMD命令中,我们可以使用一些特定的格式化符号来格式化时间和日期的显示方式。
例如,使用"%date:~0,4%"命令可以只显示当前日期的年份,使用"%date:~5,2%"命令可以只显示当前日期的月份。
同样地,使用"%time:~0,2%"命令可以只显示当前时间的小时数,使用"%time:~3,2%"命令可以只显示当前时间的分钟数。
通过这些格式化符号,我们可以根据自己的需求,灵活地处理时间和日期的显示。
三、计算时间差在CMD命令中,我们可以使用一些命令来计算时间差。
例如,使用"echo %time%"命令可以显示当前时间,然后使用"ping 1.1.1.1 -n 1 -w 5000 > nul"命令可以等待5秒钟,再次使用"echo %time%"命令可以显示等待5秒钟后的时间。
通过计算这两个时间的差值,我们可以得到5秒钟的时间差。
用Dos批处理取1天之前的日期
echo %input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
pause>nul
goto Main
:count
set /a sm-=1
if !sm! equ 0 set /a sm=12, sy-=1
call :days
set /a sd+=days
for %%i in (%str%) do (
set /a num+=1
if %sm% equ !num! set days=%%i&goto :eof
)
goto :eof
代码2:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
现在发三个求N天前日期的批处理( 日期可以带星期,但是,必须以年月日的顺序排列,年份必须是四位,否则会出错),在关键部分都有注释,比willsort的容易懂一点:
代码1:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
::前一天的日期,格式化输出
echo ----代码开始----------
echo Wscript.echo dateadd("d",-1,date)>vbs.vbs
for /f %%a in ('cscript //nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a
用批处理文件删除n天前的文件 DEL
用批处理文件删除n天前的文件DELforfiles /p <目标目录名> /d <天数> /c <执行的命令>看看列出的三个参数都有什么用处:/p 指定了要在哪个目录里查找文件,默认是当前工作目录,注意不能在目录名后面加斜杠。
/d 指定一个日期或天数,用于比较文件的最后修改日期是否符合条件。
/c 对每个找到的文件执行的命令。
例1.要把在C盘根目录下最后修改日期大于或等于2007年7月1日的文件复制到D盘根目录下:forfiles /p "c:" /d "2007-7-1" /c "cmd /c copy @path d:/"例2.删除在C盘backup目录下最后修改日期在10天前的文件:forfiles /p "c:/backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"看了上面的例子,觉得在Windows Server 2003 下面要删除老文件很简单吧。
但如果操作系统是Windows 2000/XP 就比较麻烦,因为它们没有forfiles命令,只能靠自己写批处理来实现了。
下面是我写的批处理文件内容:@echo offrem ******************************rem * 按时间删除文件目录的批处理*rem ******************************rem 设置临时目录的路径set tempDir=%tmp%/remove_%date:~0,10%if not exist %tempDir% md %tempDir%rem 设置处理日期的脚本文件的路径set scriptFile=%tempDir%/get_date.vbsrem 获得要保留的天数set days=%~1if "%days%" == "" goto printUsagerem 获得目标目录的路径set dirPath=%~2if "%dirPath%" == "" set dirPath=.rem 获得要操作的文件形式set fileSpec=%~3if "%fileSpec%" == "" set fileSpec=*.*rem 生成计算日期的脚本文件并获得删除的截止日期echo d=date()-%1 > %scriptFile%echo s=right("0000" ^& year(d),4) ^& "-" ^& right("00" ^& month(d),2) ^& "-" ^& right("00" ^& day(d),2) >> %scriptFile%echo wscript.echo s >> %scriptFile%for /f %%i in ('cscript /nologo %scriptFile%') do set lastDate=%%irem 处理目标目录里的每个对象for /f "tokens=1,2,3* delims=<> " %%i in ('dir "%dirPath%/%fileSpec%" /a /-c /tc') docall :proc "%%i" "%%j" "%%k" "%%l"goto :donerem 处理目标目录里对象的过程:procrem 获得对象的创建日期并判断是否为有效格式set fileDate=%~1echo %fileDate% | findstr "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" > nulif errorlevel 1 goto endrem 获得对象的类型set fileType=%~3if "%fileType%" == "" goto endrem 获得对象的名称set fileName=%~4if "%fileName%" == "" goto endif "%fileName%" == "." goto endif "%fileName%" == ".." goto endif "%fileName%" == "字节" goto endif "%fileName%" == "可用字节" goto endrem 判断对象日期是否小于或等于删除的截止日期if "%fileDate:~0,10%" leq "%lastDate%" (echo deleting "%fileName%" ...if "%fileType%" == "DIR" ( rd /s /q "%dirPath%/%fileName%" ) else ( del /q /f"%dirPath%/%fileName%" ))goto end:errorecho An error occurred during backuping.:donerd /s /q %tempDir%goto end:printUsageecho Usage: %0 ^<Days^> [Work directory] [Target file specification (can include wildcards)]goto end:end这个批处理的语句很多,我表达能力有限,不一一解释了。
Windows批处理脚本---取得指定N天前的日期
set xDay=%disDays%
set newM=1
set newD=0
set /a "R=(^!(yTh%%4)&^!^!(yTh%%100))|^!(yTh%%400)","C_2829=28+R"
for %%a in (31, !C_2829!,31,30,31,30,31,31,30,31,30,31-agoDays
set yTh=%YY%
set R=0
if !disDays! LEQ 0 set /a "yTh=%YY%-1","R=(^!(yTh%%4)&^!^!(yTh%%100))|^!(yTh%%400)","disDays=365+R+disDays"
if !xDay! GTR %%a set /a "newM+=1","xDay-=%%a"
)
:tuiChu
goto :EOF
:endLoop
echo ==== End %date% %time% ==== >>%logFile%
if !xDay! LEQ %%a set /a "newD=!xDay!"&(if !newM! LSS 10 set newM=0!newM!
if !newD! LSS 10 set newD=0!newD!
set newDate=!yTh!!newM!!newD!)&goto tuiChu
Rem 获取当天x天前的日期
@echo off
rem 开启变量延迟
shell获取昨天、明天或多天前的日期
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数
把计 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
200911
[root@Gman root]# date -d next-year +%Y #明年日期
2010
DATE=$(date +%Y%m%d --date ’2 days ago’) #获取昨天或多天前的日期
名称 : date
使用权限 : 所有使用者
使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
date 工具可以完成更多的工作,不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几,并得到相对于当前日期的相对日期。了解某一天是星期几
GNU 对 date 命令的另一个扩展是 -d 选项,当您的桌上没有日历表时(UNIX 用户不需要日历表),该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期究竟是星期几:
d 选项还可以告诉您,相对于 当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
date命令获取昨天、明天或多天前后的日期
date命令获取昨天、明天或多天前后的日期在实际操作中,一些脚本中会调用明天,或者昨天,或更多天前的日期,本文将叙述讲述用date命令实现时间的显示。
在Linux系统中用man date -d 查询的参数说的比较模糊,以下举例进一步说明:# man date-d, --date=STRINGdisplay time described by STRING, not ‘now’查看明天日期# date -d next-day +”%Y%m%d”# date -d tomorrow +”%Y%m%d”查看昨天日期# date -d last-day +”%Y%m%d”# date -d yesterday +”%Y%m%d”查看上个月日期# date -d last-month +”%Y%m%查看下个月日期date -d next-month +”%Y%m%查看明年日期# date -d next-year +”%Y”获取昨天或多天前的日期DATE=$(date +%Y%m%d --date ’2 days ago’)date命令能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:时间方面∙%:印出∙% %n:下一行∙%t:跳格∙%H:小时(00..23)∙%I:小时(01..12)∙%k:小时(0..23)∙%l:小时(1..12)∙%M:分钟(00..59)∙%p:显示本地AM 或PM∙%r:直接显示时间(12 小时制,格式为hh:mm:ss [AP]M)∙%s:从1970 年1 月1 日00:00:00 UTC 到目前为止的秒数%S:秒(00..61)∙%T:直接显示时间(24 小时制)∙%X:相当于%H:%M:%S∙%Z:显示时区日期方面∙%a:星期几(Sun..Sat)∙%A:星期几(Sunday..Saturday)∙%b:月份(Jan..Dec)∙%B:月份(January..December)∙%c:直接显示日期和时间∙%d:日(01..31)∙%D:直接显示日期(mm/dd/yy)∙%h:同%b∙%j:一年中的第几天(001..366)∙%m:月份(01..12)∙%U:一年中的第几周(00..53)(以Sunday 为一周的第一天的情形)∙%w:一周中的第几天(0..6)∙%W:一年中的第几周(00..53)(以Monday 为一周的第一天的情形)∙%x:直接显示日期(mm/dd/yy)∙%y:年份的最后两位数字(00.99)∙%Y:完整年份(0000..9999)若是不以加号作为开头,则表示要设定时间,而时间格式为:MMDDhhmm[[CC]YY][.ss] 其中:∙MM 为月份∙DD 为日∙hh 为小时∙mm 为分钟∙CC 为年份前两位数字∙YY 为年份后两位数字∙ss 为秒数选项:∙-d datestr:显示datestr 中所设定的时间(非系统时间)∙--help:显示辅助讯息∙-s datestr:将系统时间设为datestr 中所设定的时间∙-u:显示目前的格林威治时间∙--version:显示版本编号例子:∙显示时间后跳行,再显示目前日期:date +”%T%n%D”∙显示月份和日数:date +”%B %d”∙显示日期和设定时间(12:34:56):date --date 12:34:56∙设置系统当前时间(12:34:56):date --s 12:34:56注意:当你不希望出现无意义的0 时(比如说1999/03/07),则能在标记中插入- 符号,比如说date +%-H:%-M:%-S 会把时分秒中无意义的0 给去掉,像是原本的08:09:04 会变为8:9:4。
date命令
date命令1、命令:date2、命令功能:date 可以⽤来显⽰或设定系统的⽇期与时间。
3、命令参数-d<字符串>:显⽰字符串所指的⽇期与时间。
字符串前后必须加上双引号;-s<字符串>:根据字符串来设置⽇期与时间。
字符串前后必须加上双引号;-u:显⽰GMT;--help:在线帮助;--version:显⽰版本信息。
4、⽇期格式字符串列表%H ⼩时(以00-23来表⽰)。
%I ⼩时(以01-12来表⽰)。
%K ⼩时(以0-23来表⽰)。
%l ⼩时(以0-12来表⽰)。
%M 分钟(以00-59来表⽰)。
%P AM或PM。
%r 时间(含时分秒,⼩时以12⼩时AM/PM来表⽰)。
%s 总秒数。
起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯⽤法来表⽰)。
%T 时间(含时分秒,⼩时以24⼩时制来表⽰)。
%X 时间(以本地的惯⽤法来表⽰)。
%Z 市区。
%a 星期的缩写。
%A 星期的完整名称。
%b ⽉份英⽂名的缩写。
%B ⽉份的完整英⽂名称。
%c ⽇期与时间。
只输⼊date指令也会显⽰同样的结果。
%d ⽇期(以01-31来表⽰)。
%D ⽇期(含年⽉⽇)。
%j 该年中的第⼏天。
%m ⽉份(以01-12来表⽰)。
%U 该年中的周数。
%w 该周的天数,0代表周⽇,1代表周⼀,异词类推。
%x ⽇期(以本地的惯⽤法来表⽰)。
%y 年份(以00-99来表⽰)。
%Y 年份(以四位数来表⽰)。
%n 在显⽰时,插⼊新的⼀⾏。
%t 在显⽰时,插⼊tab。
MM ⽉份(必要)DD ⽇期(必要)hh ⼩时(必要)mm 分钟(必要)ss 秒(选择性)5、实例格式化输出:date +"%Y-%m-%d"2015-12-07输出昨天⽇期:date -d "1 day ago" +"%Y-%m-%d"2015-11-192秒后输出:date -d "2 second" +"%Y-%m-%d %H:%M.%S"2015-11-20 14:21.31传说中的 1234567890 秒:date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"2009-02-13 23:02:30普通转格式:date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"2009/12/12 00:00.00apache格式转换:date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"2009-12-05 00:00.37格式转换后时间:date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"2007-12-05 00:00.37加减操作:date +%Y%m%d #显⽰前天年⽉⽇date -d "+1 day" +%Y%m%d #显⽰前⼀天的⽇期date -d "-1 day" +%Y%m%d #显⽰后⼀天的⽇期date -d "-1 month" +%Y%m%d #显⽰上⼀⽉的⽇期date -d "+1 month" +%Y%m%d #显⽰下⼀⽉的⽇期date -d "-1 year" +%Y%m%d #显⽰前⼀年的⽇期date -d "+1 year" +%Y%m%d #显⽰下⼀年的⽇期设定时间:date -s #设置当前时间,只有root权限才能设置,其他只能查看date -s 20120523 #设置成20120523,这样会把具体时间设置成空00:00:00date -s 01:01:01 #设置具体时间,不会对⽇期做更改date -s "01:01:01 2012-05-23" #这样可以设置全部时间date -s "01:01:01 20120523" #这样可以设置全部时间date -s "2012-05-23 01:01:01" #这样可以设置全部时间date -s "20120523 01:01:01" #这样可以设置全部时间检查⼀组命令花费的时间:#!/bin/bashstart=$(date +%s)nmap &> /dev/nullend=$(date +%s)difference=$(( end - start ))echo $difference seconds.1、显⽰时间date命令可以按照指定格式显⽰⽇期,只键⼊date则以默认格式显⽰当前时间。
Windows批处理脚本---取得指定N天前的日期
Windows批处理脚本---取得指定N天前的日期windows批处理获取几天前的日期。
目前是去年1月1日志今天的所有日期。
可另存为*.bat脚本直接执行。
Rem 获取当天x天前的日期@echo offrem 开启变量延迟setlocal enabledelayedexpansionset baseDir=D:rem == 需要输入参数 agoDaysrem 设定天数(0~365)set agoDays=30if agoDays EQU "" set agoDays=60if %agoDays% GTR 365 set agoDays=365rem 初始化新日期set newDate=0rem 日志文件set logFile=%baseDir%\\logs.txtecho ==== Begin %date% %time% ==== >>%logFile%REM echo %date% %time% >>%logFile%rem 调用子函数获取几天前的日期call :date2days2date %agoDays%echo newDate=!newDate!>>%logFile%goto endLooprem 获取当前时间的目录名:date2days2dateset agoDays=%1set curDays=0for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do ( set YY=%%a&set MM=%%b&set DD=%%c&if "!MM:~0,1!"=="0" set MM=!MM:~1!if "!DD:~0,1!"=="0" set D=!DD:~1! )if !MM! EQU 1 set /a "M_31=0","M_2829=0"if !MM! EQU 3 set /a "M_31=1"if !MM! EQU 5 set /a "M_31=2","M_30=1"if !MM! EQU 7 set /a "M_31=3","M_30=2"if !MM! EQU 8 set /a "M_31=4","M_30=2"if !MM! EQU 10 set /a "M_31=5","M_30=3"if !MM! EQU 12 set /a "M_31=6","M_30=4"if !MM! EQU 2 set M_2829=Dif !MM! EQU 4 set /a "M_31=2","M_30=0"if !MM! EQU 6 set /a "M_31=3","M_30=1"if !MM! EQU 9 set /a "M_31=5","M_30=2"if !MM! EQU 11 set /a "M_31=6","M_30=3"if !MM! GTR 2 set /a "R=(^!(YY%%4)&^!^!(YY%%100))|^!(YY%%400)","M_2829=28+ R"set /a curDays=M_2829+30*M_30+31*M_31+Dset /a disDays=curDays-agoDaysset yTh=%YY%set R=0if !disDays! LEQ 0 set /a "yTh=%YY%-1","R=(^!(yTh%%4)&^!^!(yTh%%100))|^!(yTh%%400)","disDays =365+R+disDays"set xDay=%disDays%set newM=1set newD=0set /a "R=(^!(yTh%%4)&^!^!(yTh%%100))|^!(yTh%%400)","C_2829=2 8+R"for %%a in (31, !C_2829!,31,30,31,30,31,31,30,31,30,31) do ( if !xDay! LEQ %%a set /a "newD=!xDay!"&(if !newM! LSS 10 set newM=0!newM!if !newD! LSS 10 set newD=0!newD!set newDate=!yTh!!newM!!newD!)&goto tuiChuif !xDay! GTR %%a set /a "newM+=1","xDay-=%%a"):tuiChugoto :EOF:endLoopecho ==== End %date% %time% ==== >>%logFile%。
批处理中的时间计算详解
批处理中的时间计算详解 最近总是有⼈在询问涉及到时间和⽇期计算的问题,其实要计算时间和⽇期最有效的⽅法是⽤vbs的时间函数,⼏⾏代码就解决了。
但我们今天要谈的就是如何⽤批来计算时间和⽇期(有点⾃找苦吃的感觉),下⾯就展开正题吧: ⼀、系统中的date和time变量 要进⾏时间和⽇期的计算,我们必须认识两个系统变量date和time。
当你在cmd中输⼊echo %date%#%time%再回车,屏幕上就会出现这样的⼀排字符:2009-08-19 星期三#10:20:10.20,前⾯是表⽰的当前的⽇期-2009年8⽉19⽇星期三共14个字符(中间有个空格),后⾯表⽰的是当前的时间10点20分10秒20毫秒共13个字符。
当然在不同的系统中时间格式是不⼀样的,我们暂以xp系统为例来继续后⾯的分析。
转回正题,现在我们可以通过变量截取命令来获得想要的时间参数。
如我想要获得当前的⼩时和分的值并把它分别赋值给名为h和m的变量:set "h=%time:~,2%"&set "m=%time:~3,2%",在这⾥要注意除了年以外所有的时间参数都是两位数的格式(年是四位),当数值不满两位时,系统会⾃动在前⾯补上0,⼩时是补上空格如: 8:04:09:03,这就会给我们的计算带来⿇烦(⼩时中的空格不影响计算),具体的将会在后⾯详细说明。
⼆、进制互换和去零操作 事实上时间参数是很⿇烦,其参数格式上存在着数种进制:⼗进制(年、毫秒)、⼗⼆进制(⽉)、三⼗进制(天,姑且这么说)、七进制(星期)、⼆四进制(⼩时)、六⼗进(分秒)。
⼤家看是不是很⿇烦,因为cmd中只能进⾏⼗进制计算,所以我们就必须先将所有的要计算的参数转化成⼗进制计算后再转回相应的进制。
我们前⾯讲到当分、秒(还有⽉、天)值不满两位时,系统会⾃动在前⾯补上0,要想正确计算,我们就必须去掉前⾯这个0。
为什么?因为在cmd中不会将08 09这样的数值认定为是⼗进制数值,⽽cmd中⼀般是只能进⾏⼗进制计算的(除了位运算),所以会导致程序出错。
DOS命令
常见DOS命令精讲(图解)1.用二种方法打开DOS命令窗口1.进入DOS命令行界面方法一在Windows 2000/XP/2003的开始菜单中执行“开始/运行”命令,在运行对话框中键入“cmd”命令,可进入命令行界面。
2.进入DOS命令行界面方法二在Windows 2000/XP/2003的开始菜单中执行“开始/程序/附件/命令提示符”,也可以打开DOS命令行界面。
2.DOS命令 At作用:列出在指定的时间和日期在计算机上运行的已计划命令或计划命令和程序。
首先要保证“计划”服务已启动才能使用 at 命令。
格式:at [\\IP] [[ID] [/delete] /delete [/yes]]at [\\computername] time [/interactive] [/every:date[,...] /next:date[,...]] command使用说明:(1)如果在没有参数的情况下使用,则 at 列出已计划的命令。
(2)\\IP:指定远程计算机,在此输入远程计划机的IP地址。
如果省略该参数,命令将安排在本地计算机。
(3)ID:指定指派给已计划命令的识别码。
(4)/delete:取消已计划的命令。
如果省略了ID,计算机中已计划的命令将被全部取消。
/yes:当删除已计划的事件时,对系统的查询强制进行肯定的回答。
(5)/time:指定运行命令的时间。
将时间以 24 小时标记(00:00 [午夜] 到 23:59)的方式表示为小时:分钟。
(6)/interactive:允许作业与在作业运行时登录用户的桌面进行交互。
(7)/every:date[,...]:在每个星期或月的指定日期(例如,每个星期四,或每月的第三天)运行命令。
将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的数字)。
用逗号分隔多个日期项。
如果省略了 date,将假定为该月的当前日期。
用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件
⽤批处理删除N天前或指定⽇期时间(前后)创建(或修改)的⽂件核⼼代码:@echo off:: by oicu#:: 15:17 2011-1-13:: 如果只是删除指定⽇期或N天前修改的⽂件,⽤forfiles即可FORFILES /P "C:\测试⽬录" /S /M *.log /D -3 /C "cmd /c if @isdir==FALSE echo del @file":: 指定⽇期(包含)前修改的⽂件:/D -yyyy/mm/dd:: 以下是流⽔账:: 使⽤限制:控制⾯板⾥设定⽇期格式为中⽂(中国):: 只有dir /tc才能查看到⽂件创建时间,默认dir都是dir /tw:: 为了取出创建时间,只好⽤两次for+find,肯定很慢。
cd /d 你的⽬录:: 如果要包含⼦⽬录,⽤for /r . %%a in (*):: 显⽰⽂件修改时间for %%a in (*) do echo "%%~ta":: 中⽂格式时相当于for %%a in (*) do for /f "tokens=1,2* delims= " %%b in ('dir /tw "%%a" ^| find /i "%%~nxa"') do echo "%%b %%c":: 删除某个时间后修改过的⽂件(这个简单)for %%a in (*) do if "%%~ta" gtr "2008-04-01" echo del "%%a":: 这个才是显⽰⽂件创建时间for %%a in (*) do for /f "tokens=1,2* delims= " %%b in ('dir /tc "%%a" ^| find /i "%%~nxa"') do echo "%%b %%c":: 删除某个时间之后创建的⽂件,如果要删除某个时间之前创建的,更改两:: 处gtr为lss。
linux中用shell获取昨天、明天或多天前的日期
linux中用shell获取昨天、明天或多天前的日期:在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:# -d, --date=STRING display time described by STRING, not `now’[root@Gman root]# date -d next-day +%Y%m%d #明天日期20091024[root@Gman root]# date -d last-day +%Y%m%d #昨天日期20091022[root@Gman root]# date -d yesterday +%Y%m%d #昨天日期20091022[root@Gman root]# date -d tomorrow +%Y%m%d # 明天日期20091024[root@Gman root]# date -d last-month +%Y%m #上个月日期200909[root@Gman root]# date -d next-month +%Y%m #下个月日期200911[root@Gman root]# date -d next-year +%Y #明年日期2010DATE=$(date +%Y%m%d --date ’2 days ago’) #获取昨天或多天前的日期,注意这里的'是单引号,不是`名称 : date使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :时间方面 :% : 印出% %n : 下一行%t : 跳格%H : 小时(00..23)%I : 小时(01..12)%k : 小时(0..23)%l : 小时(1..12)%M : 分钟(00..59)%p : 显示本地 AM 或 PM%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61)%T : 直接显示时间 (24 小时制)%X : 相当于 %H:%M:%S%Z : 显示时区日期方面 :%a : 星期几 (Sun..Sat)%A : 星期几 (Sunday..Saturday)%b : 月份 (Jan..Dec)%B : 月份 (January..December)%c : 直接显示日期和时间%d : 日 (01..31)%D : 直接显示日期 (mm/dd/yy)%h : 同 %b%j : 一年中的第几天 (001..366)%m : 月份 (01..12)%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)%w : 一周中的第几天 (0..6)%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)%x : 直接显示日期 (mm/dd/yy)%y : 年份的最后两位数字 (00.99)%Y : 完整年份 (0000..9999)若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数把计 :-d datestr : 显示 datestr 中所设定的时间 (非系统时间)--help : 显示辅助讯息-s datestr : 将系统时间设为 datestr 中所设定的时间-u : 显示目前的格林威治时间--version : 显示版本编号例子 :显示时间后跳行,再显示目前日期 : date +%T%n%D显示月份和日数 : date +%B %d显示日期和设定时间(12:34:56) : date --date 12:34:56设置系统当前时间(12:34:56):date --s 12:34:56注意 : 当你不希望出现无意义的 0 时(比如说 1999/03/07),则能在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。
dos日期时间格式设置使用小结(Date和Time)
dos⽇期时间格式设置使⽤⼩结(Date和Time)复制代码代码如下:@echo off@title 字符串的编辑测试(下⾯描述⽤的箭头→←分别表⽰向右、向左的意思)set aa=1234567890echo 说明:下⾯复合变量中,逗号前的数字表⽰指针偏移量,逗号后的数字表⽰提取的字符长度echo %aa:~1,5% //指针向右→偏移1位,然后从指针处开始向右→提取5个字符.echo %aa:~0,-3% //指针不偏移,→提取所有字符,并除去最后3个字符.echo %aa:~5% //单个数字,不指定长度值.表⽰指针→偏移5个字符,然后,→提取所有字符.echo %aa:~-5% //单个负值,特例,表⽰指针反⽅向偏移,从最右端起,←偏移5位,然后从指针处开始→提取所有字符.也可以简单理解为提取字符串末尾5个字符.echo 指针反⽅向偏移的情况.既是从字符串最右端起⾃右向左偏移.←echo %aa:~-2,1% //偏移量取负值,表⽰指针从最右端起,向左←偏移2位,然后从指针处开始向右→提取1个字符,⽣成新的变量值.注意字符串末尾的空格,因为空格也将作为"透明字符"提取到变量中去,切记要去掉变量末尾的空格.ctrl+A即可快速⽅便的检查该变量字符串末端是否含有空格.echo %aa:~-4,3% //最右端起,指针←偏移4位,然后→提取3个字符.echo %aa:~-4,-2% //从最右端起,指针←偏移4位,然后从指针处开始,→提取所有字符,并去除最后2个字符.echo 应⽤echo %date:~0,10% //提取年⽉⽇信息echo %date:~-3% //提取星期⼏信息echo %time:~0,5% //提取时间中的时和分echo %time:~0,-3% //提取时和分和秒信息pause⼩结:1、偏移量为正值时,表⽰指针向右移动;为负值时,表⽰指针从字符串最右端起向左移动.2、如果长度值为正,表⽰向右提取若⼲个字符;如果为负,表⽰向右提取所有字符,并去除若⼲个字符."若⼲个=长度值的绝对值。
批处置删除指定天数日期之前文件
[日期时刻]批处置删除指定天数日期之前的文件收藏【方案一】删除指定途径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + REG + VBSview plaincopy to clipboardprint?@echo off::演示:删除指定途径下指定天数之前(以文件的最后修改日期为准)的文件。
::若是演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例挪用了临时VBS代码进行日期计算::本例为兼容不同的日期格式,挪用reg命令(XP系统自带)统一设置日期格式,::处置完毕以后再把日期格式恢复成原先的状态。
rem 指定待删除文件的寄存途径set SrcDir=C:\Test\BatHomerem 指定天数set DaysAgo=1for /f "skip=2 delims=" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (set "RegDateOld=%%a")set RegDateOld=%RegDateOld:~-8%reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul>"%temp%\" echo LastDate=date()-%DaysAgo%>>"%temp%\" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)>>"%temp%\" echo FmtDatefor /f %%a in ('cscript /nologo "%temp%\"') do (set "DstDate=%%a")。
DOS的Lable及Date命令使用说明
DOS的Lable及Date命令使用说明
DOS*作系统中,你知道DOS的Lable及Date命令使用说明是什么?不知道的话,下面就跟小编一起来了解一下吧!希望能给大家带来帮助!
lable:设置卷标号
[适用场合]用来为磁盘做个标记
[用法]label显示磁盘卷标
label[盘符][卷标名]设定指定盘的卷标
[例子]
C:>label
VolumeindriveCisWANG
VolumeSerialNumberis2116-1DD0
volumelabel(11characters,Enterfornone)?
可以输入卷标,直接回车后
Deletecurrentvolumelabel(Y/N)?
按y删除旧卷标,按n不更改
date:显示及修改日期
[适用场合]想知道或修改时间和日期
[用法]date显示和改变当前日期本文来自bianceng(学电脑)
[例子]C:>date09-20-1996....将日期改为1996年9月20日
C:>date
CurrentdateisTue08-20-1996
Enternewdate(mm-dd-yy):09-20-1996
按月-日-年的顺序修改当前日期直接按回车键忽略修改日期。
DOS命令行删除N天以前的文件
::统一语法
::删除指定路径下指定日数以前修改的文件
::set /a将日期与相对天数进行相互换算,以求得差值日期
::删除昨天前修改的文件(包含昨天)
DateDel2.bat 1 d:\conf
::注意根据不同系统修改相应的date扩展变量
DelOldFile.cmd2008-01-05d:\conf
:: Climbing -2005-8-26- CMD@WinXP
@echo off
if "%1"=="" goto _usage
set dst=.\.
if not "%2"=="" if exist %2\. (set dst=%2\.) else (goto _err1)
for /r %dst% %%f in (*.*) do if %%~tf LSS %1del/f /q %%f && echo删除%%f
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
使用方法
::DelOldFile.cmd
::删除固定日期前的文件
::Win2003语法
DelOldFile.cmd2008-01-05d:\conf
set /a i=%1,a=i+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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现在发三个求N天前日期的批处理( 日期可以带星期,但是,必须以年月日的顺序排列,年份必须是四位,否则会出错),在关键部分都有注释,比willsort的容易懂一点:
代码1:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
call:DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
set/a PassDays-=%DaysAgo%
call:DaysToDate %PassDays% DstYear DstMonth DstDayset DstDate=%DstYear%-%DstMonth%-%DstDay%
echo Wscript.echo dateadd("d",-1,date)>vbs.vbs
for /f %%a in ('cscript //nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a
for /f "tokens=1,2,3* delims=// " %%i in ('echo %yyyymmdd%') do set yyyy=%%i&set mm=%%j&set dd=%%k
echo %PassDays%
pause
==========================
test.bat
BatchFile code
@echo off
rem 计算指定天数之前的日期
set DaysAgo=1
rem 假设系统日期的格式为yyyy-mm-dd
=======================
下面的代码有问题:当是月初1日的时候,结果会是0,如当前是20100601,结果成了20100600
@echo off
set DaysAgo=1
set Today=%date:~0,4%%date:~5,2%%date:~8,2%
set /a PassDays=%Today%-1
::如果日期是 / 分割,如2010/06/01
for /f "tokens=1,2,3* delims=// " %%i in ('date /t') do @echo %%i%%j%%k
::当天日期,格式化输出
for /f "tokens=1,2,3* delims=// " %%i in ('date /t') do set yyyy=%%i&set mm=%%j&set dd=%%k
set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
)
set /a sd-=input
if %sd% leq 0 call :count
cls
echo.&echo.
echo 指定的日期是:%day%
echo.
set sm=0%sm%
endlocal&set%4=%j%&goto:EOF:DaysToDate %days% yy mm ddsetlocal ENABLEEXTENSIONSset/a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=aset/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/=5set/a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10(if %mm% LSS10set mm=0%mm%)&(if %dd% LSS10set dd=0%dd%)endlocal&set%2=%yy%&set%3=%mm%&set%4=%dd%&
for /f %%a in ('cscript //nologo vbs.vbs') do del vbs.vbs&&echo %%a
::当天日期
echo %date:~0,4%%date:~5,2%%date:~8,2%
::如果日期是 - 分割,如2010-06-01
for /f "tokens=1,2,3* delims=- " %%i in ('date /t') do @echo %%i%%j%%k
for /f "tokens=1,2,3* delims=/" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=/" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
标题: 求N天前日期的批处理 上一主题 | 下一主题
『楼 主』: 求N天前日期的批处理
经常有人询问N天前的日期如何计算,因为牵涉到大月小月、平年闰年的问题,代码将会比较复杂,让人望而却步。
虽然两年前willsort曾经发出过这样的代码(请参考:(已结)如果在WINDOWS下DOS命令行删除N天以前的文件),尽管思路极其简单:把日期转化为相对数字,做完减法之后,再把相对数字转化为日期,但是,2472632、146097之类的数字来得太过突兀,让人摸不着头脑,说实话,限于水平,我现在都还看得一头雾水。
rem set m=%nowdate:~15,2%
rem set ndate=%P%%t%%m%
rem echo %ndate%
========================================================================================
@echo off
:: 求N天前的日期
:: 思路:
:: 把当前日期转换为天数
echo %DaysAgo%天的日期是%DstDate%
pause
goto :eof
:DateToDays %yy% %mm% %dd% days
set local ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%)
set sd=0%sd%
echo %input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
pause>nul
goto Main
:count
set /a sm-=1
if !sm! equ 0 set /a sm=12, sy-=1
call :days
set /a sd+=days
echo %yyyy%++++%mm%++++%dd%
========================================================================================
取前一天的日期 OK
========================================================================================
:: 年份必须是四位,否则会出错
set day=%date%
set days=0
echo.&echo.
echo 指定的日期是:%day%
echo.
set /p input= 请指定要追溯的天数:
:: 提取日期
for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
if %mm% LSS 9 set mm=0%mm%
if %dd% LSS 9 set dd=0%dd%
echo %yyyy%++++%mm%++++%dd%
echo -----代码结束---------
::取前一天的日期
echo Wscript.echo dateadd("d",-1,date)>vbs.vbs
取前一天的日期 OK
========================================================================================
@echo off
::前一天的日期,格式化输出
echo ----代码开始----------
@echo off
:: 求N天前的日期
:: 思路:
:: 模拟手工运算,用日期数减去天数,差值为负时向高位借1。
:: 特点:
:: 代码简洁,容易理解,速度快慢取决于指定的天数大小
setlocal enabledelayedexpansion