Windows批处理脚本---取得指定N天前的日期
解析Windows cmd命令中的时间日期处理函数
解析Windows cmd命令中的时间日期处理函数Windows cmd命令是Windows操作系统中的命令行工具,它提供了许多强大的功能,包括时间日期处理函数。
在本文中,我们将详细解析Windows cmd命令中的时间日期处理函数。
Windows cmd命令中的时间日期处理函数主要包括获取当前日期时间、格式化日期时间、计算日期时间差等功能。
下面我们将逐一介绍这些函数的用法和示例。
1. 获取当前日期时间在Windows cmd命令中,可以使用`date`和`time`命令分别获取当前日期和时间。
例如,要获取当前日期,可以使用以下命令:```date /t```该命令将显示当前日期,格式为“YYYY-MM-DD”。
要获取当前时间,可以使用以下命令:```time /t```该命令将显示当前时间,格式为“HH:MM:SS”。
2. 格式化日期时间Windows cmd命令提供了一些格式化日期时间的函数,可以将日期时间按照指定的格式进行显示。
例如,要将当前日期格式化为“YYYY年MM月DD日”的形式,可以使用以下命令:```for /F "usebackq tokens=1-3 delims=-" %%i in (`date /t`) do echo %%i年%%j 月%%k日```该命令将显示当前日期,格式为“YYYY年MM月DD日”。
类似地,要将当前时间格式化为“HH时MM分SS秒”的形式,可以使用以下命令:```for /F "usebackq tokens=1-3 delims=:." %%i in (`time /t`) do echo %%i时%%j 分%%k秒```该命令将显示当前时间,格式为“HH时MM分SS秒”。
3. 计算日期时间差Windows cmd命令还提供了计算日期时间差的功能。
例如,要计算两个日期之间的天数差,可以使用以下命令:```set start_date=2022-01-01set end_date=2022-12-31for /F "usebackq tokens=1-3 delims=-" %%i in ('echo %start_date%') do setstart_day=%%kfor /F "usebackq tokens=1-3 delims=-" %%i in ('echo %end_date%') do setend_day=%%kset /A day_diff=%end_day%-%start_day%echo 日期差:%day_diff%天```该命令将计算2022年1月1日与2022年12月31日之间的天数差,并显示结果。
用批处理文件删除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批处理:获取时间变量
Windows批处理:获取时间变量1、获得系统当前时间1.::获得⽇期 %date:~0,4%表⽰获得date的第0个起的四个字符2.echo %data%3.set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%4.echo %CURRENT_DATE%5.::获得星期6.set week=%date:~11%7.echo %week%8.::获得时间9.set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%10.set hour=%time:~0,2%11.set minute=%time:~3,2%12.echo %CURRENT_TIME%2、if 判断note:注意bat⽂件编码与window系统的编码⼀致性1.if %week%==周⽇ (2.echo 今天周末3.)3、变量的定义,和修改,有的博客资料中说要加SETLOCAL ENABLEDELAYEDEXPANSION ,这样在执⾏时候会重新加载环境变量。
但我在win10上测试不加也可以。
但出现了⼀个特别的存在,见后⾯的demo,修改后第⼀次还是原来数据,第⼆次进⼊循环才正确读取。
1.@echo off2.set isSingle_am=03.echo %isSingle_am%4.set isSingle_am=15.echo %isSingle_am%6.pause执⾏如图:4 、随机数下例:随机出[1,10]的随机数set num=%random%2.set /a num=num%%10+13.echo %num%5、定时操作调⽤下⾯代码:延时2秒choice /t 2 /d y /n >nul6、⽆线循环操作,for循环我没仔细研究,这⾥⽤到的模式如下:1.:start2.3.....4.5.go start下⾯是我写的⼀个打卡 demo,但不清楚为何变量修改后,反应不及时,仍然打印的是原来数字,第⼆次循环打印的才是修改后的:1.@echo off2.SETLOCAL ENABLEDELAYEDEXPANSION3.set isSingle_am=04.set isSingle_pm=05.set num=%random%6.set /a num=num%%10+17.echo %num%8.:start9.10.11.::获得⽇期12.::set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%13.::echo %CURRENT_DATE%14.::获得星期15.::set week=%date:~11%16.::echo %week%17.::获得时间18.::set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%19.::set hour=%time:~0,2%20.::set minute=%time:~3,2%::echo %CURRENT_TIME%23.24.25.26.if %date:~11%==周⽇ (27.echo 今天周末28.)29.if %date:~11%==周六 (30.echo 今天周末31.) else (32.33.echo 今天⼯作⽇34.35.if %time:~0,2%==8 (36.37.if %time:~3,2% GTR 45+num (38.39.if %isSingle_am%==0 (40.echo 打早卡41.choice /t 1 /d y /n >nul42.set isSingle_am=143.echo 打早卡%num%44.choice /t 2 /d y /n >nul45.) else (46.echo 已经打过早卡47.)48.)49.)50.51.if %time:~0,2%==16 (52.if %time:~3,2% GTR 0+num ( 53.echo 打晚卡54.if %isSingle_pm%==0 (choice /t 1 /d y /n >nul57.set isSingle_pm=158.echo 打晚卡%isSingle_pm%59.choice /t 2 /d y /n >nul60.) else (61.echo 已经打过晚卡62.)63.64.)65.)66.67.)68.69.choice /t 20 /d y /n >nul70.71.goto start72.73.74.pause执⾏结果如下:当前时间是16点,执⾏的打晚卡,执⾏了1.set isSingle_pm=12.echo 打晚卡%isSingle_pm%后打印的仍然 isSingle_pm为0.但第⼆次进⼊循环的时候判断if %isSingle_pm%==0 没有通过,就是说第⼆次读取的时候setisSingle_pm=1(现在⼩弟仍然不清楚为什么,SETLOCAL ENABLEDELAYEDEXPANSION 加不加结果⼀样,望熟悉的⼈bat 语⾔的⼤神指正下)。
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。
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%。
用批处理删除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。
windows应用场景下批量修改文件夹创建日期的批处理脚本
windows应用场景下批量修改文件夹创建日期的批处理脚本在Windows应用场景下,如果需要批量修改文件夹的创建日期,可以使用批处理脚本来实现。
批处理脚本是一种可以自动执行一系列命令的脚本文件,可以大量简化繁琐的操作,提高工作效率。
本文将介绍如何编写一个批处理脚本来批量修改文件夹的创建日期。
首先,我们需要了解一些基本知识。
在Windows中,每个文件夹都有一个创建日期属性,记录了文件夹的创建时间。
批处理脚本可以通过修改文件夹的创建日期属性来实现批量修改。
要编写批处理脚本,我们需要使用Windows系统自带的命令行工具,如命令提示符(CMD)或者PowerShell。
这些工具提供了一系列用于操作文件和文件夹的命令,我们可以利用这些命令来实现批量修改文件夹的创建日期。
下面是一个示例的批处理脚本,可以批量修改指定文件夹下所有子文件夹的创建日期:```batch@echo offsetlocal enabledelayedexpansionset target_folder=C:\path\to\your\folderset new_create_date=2022/01/01for /D /R "%target_folder%" %%F in (*) do (echo %%Fpowershell -Command "(Get-Item '%%F').CreationTime ='%new_create_date%'")echo Done.```在上面的批处理脚本中,我们首先使用`set`命令定义了两个变量,`target_folder`表示目标文件夹路径,`new_create_date`表示新的创建日期。
你可以根据实际情况修改这两个变量的值。
接下来,我们使用`for /D /R`命令来遍历目标文件夹下的所有子文件夹。
`%%F`是一个循环变量,代表当前遍历到的文件夹。
windows批处理命令详解及脚本实例[精选]doc
批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。
第一部分:批处理内部命令1、REMREM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。
例:REM 你现在看到的就是注解,这一句将不会被执行。
在以后的例子中解释的内容都REM 会放在REM后面。
请大家注意。
2、ECHOECHO 是一个回显命令主要参数有OFF和ON,一般用ECHO message来显示一个特定的消息。
例:Echo offRem 以上代表关闭回显即不显示所执行的命令Echo 这个就是消息。
Rem 以上代表显示"这就是消息"这列字符执行结果:C:\>ECHO.BAT这个就是消息。
3、GOTOGOTO 即为跳转的意思。
在批处理中允许以":XXX"来构建一个标号然后用GOTO :标号直接来执行标号后的命令。
例:LABELREM 上面就是名为LABEL的标号。
DIR C:\DIR D:\GOTO LABELREM 以上程序跳转标号LABEL处继续执行。
4、CALLCALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。
例:批处理2.BAT内容如下:ECHO 这就是2的内容批处理1.BAT内容如下:ECHO 这是1的内容CALL 2.BATECHO 1和2的内容全部显示完成执行结果如下:C:\>1.BAT这是1的内容这就是2的内容1和2的内容全部显示完成5、PAUSEPAUSE 停止系统命令的执行并显示下面的内容。
例:C:\> PAUSE请按任意键继续. . .6、IFIF 条件判断语句,语法格式如下:IF [NOT] ERRORLEVEL number commandIF [NOT] string1==string2 commandIF [NOT] EXIST filename command说明:[NOT] 将返回的结果取反值即"如果没有"的意思。
Windows cmd 中的系统时间和日期设置详解
Windows cmd 中的系统时间和日期设置详解Windows操作系统是目前使用最广泛的操作系统之一,而命令提示符(cmd)是Windows中一个非常强大的工具,可用于执行各种系统操作和管理任务。
其中,系统时间和日期的设置是常见的操作之一。
本文将详细介绍Windows cmd中的系统时间和日期设置方法,帮助读者更好地掌握这一功能。
一、查看系统时间和日期在开始介绍设置方法之前,首先需要了解如何查看当前系统的时间和日期。
在cmd中,可以使用以下命令来查看系统时间和日期:```time /tdate /t```执行上述命令后,系统将显示当前的时间和日期信息。
其中,`time /t`命令用于查看当前的时间,`date /t`命令用于查看当前的日期。
二、设置系统时间和日期1. 设置系统时间要设置系统时间,可以使用以下命令:```time HH:mm:ss```其中,HH代表小时,mm代表分钟,ss代表秒钟。
例如,要将系统时间设置为下午3点30分,可以执行以下命令:```time 15:30:00```执行上述命令后,系统的时间将被设置为15:30:00。
2. 设置系统日期要设置系统日期,可以使用以下命令:```date yyyy-MM-dd```其中,yyyy代表年份,MM代表月份,dd代表日期。
例如,要将系统日期设置为2022年10月1日,可以执行以下命令:```date 2022-10-01```执行上述命令后,系统的日期将被设置为2022年10月1日。
三、设置系统时间和日期的其他选项除了基本的时间和日期设置外,Windows cmd还提供了一些其他选项,用于更精确地设置系统时间和日期。
1. 设置系统时间的时区要设置系统时间的时区,可以使用以下命令:```tzutil /s 时区标识符```其中,时区标识符代表不同的时区。
例如,要将系统时间的时区设置为中国标准时间,可以执行以下命令:```tzutil /s "China Standard Time"```执行上述命令后,系统的时间将根据中国标准时间进行调整。
Windows cmd命令中的系统日期和时间操作指令
Windows cmd命令中的系统日期和时间操作指令Windows操作系统中的命令提示符(cmd)是一个强大的工具,它提供了许多有用的命令来管理和控制计算机的各种操作。
其中,系统日期和时间操作指令在日常使用中尤为重要。
本文将介绍一些常用的系统日期和时间操作指令,以帮助读者更好地管理和调整计算机的日期和时间设置。
首先,我们来看一下如何查看当前系统的日期和时间。
在命令提示符下,输入"date"命令,系统将显示当前日期。
类似地,输入"time"命令,系统将显示当前时间。
这两个命令可以帮助我们快速了解计算机的当前日期和时间。
接下来,我们将介绍如何修改系统的日期和时间。
要修改日期,可以使用"date"命令后加上要设置的日期。
例如,输入"date 2022/01/01",系统将把日期设置为2022年1月1日。
同样地,要修改时间,可以使用"time"命令后加上要设置的时间。
例如,输入"time 12:00:00",系统将把时间设置为中午12点。
通过这些命令,我们可以方便地将系统的日期和时间调整到我们需要的值。
除了修改日期和时间,我们还可以使用其他命令来获取更多有关日期和时间的信息。
例如,输入"echo %date%"命令,系统将显示当前日期。
类似地,输入"echo %time%"命令,系统将显示当前时间。
这些命令可以将日期和时间信息输出到命令提示符窗口,方便我们查看和使用。
此外,Windows操作系统还提供了一些高级的日期和时间操作指令。
例如,我们可以使用"date /t"命令来仅显示当前日期,而不显示时间。
类似地,使用"time /t"命令可以仅显示当前时间,而不显示日期。
这些命令可以根据我们的需求,灵活地获取所需的日期或时间信息。
如何利用批处理文件获取前一天的日期
if not defined date1 set date1=%%a ) echo %date1%
echooffrem计算指定天数之前的日期setdaysago1rem假设系统日期的格式为yyyymmddcall
如何利用批处理文件获取前一天的日期
1. 利用CMD语句
@echo off rem 计算指定天数之前的日期 set DaysAgo=1 rem 假设系统日期的格式为yyyy-mm-dd call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays set /a PassDays-=%DaysAgo% call :DaysToDate %PassDays% DstYear DstMonth DstDay set DstDate=%DstYear%-%DstMonth%-%DstDay% echo %DaysAgo%天的日期是%DstDate% pause goto :eof
批处置删除指定天数日期之前文件
[日期时刻]批处置删除指定天数日期之前的文件收藏【方案一】删除指定途径下指定天数之前(以文件的最后修改日期为准)的文件: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")。
用批处理文件删除n天前的文件
批处理文件删除N天前的文件公司服务器用来备份数据的硬盘过段时间就会被备份文件占满,弄得我老是要登录到服务器去手工删除那些老的文件有时忘记了就会导致硬盘空间不足而无法备份。
因为只要保留最近几天的备份如果可以做一个批处理让系统自动删除老备份文件就好了但是Windows的命令行和Linux的Shell比起来功能差了很多到底行不行我自己也不清楚。
于是上网查了一下各位大虾发的帖子再经过自己的摸索和尝试发现只要花点功夫还是能实现这个功能的。
Windows Server 2003内置的命令行文件适合于XP以上系统示例forfiles/m.bkf/d-28/ccmd/c delfile/f删除当前目录下28天以前的扩展名为bkf文件(以当前系统时间为基准)。
forfiles自动删除7天前文件delete2008-09-12 15:01用forfiles.exe试试。
Forfiles /p”d:\test”/s/m*.*/d-7/c”cmd/c del@path”做成批处理文件,bat文件与forfiles.exe同一目录下,建一个bat文件的快捷方式在启动。
D:\test换成你要的目录路径。
日期是指修改的日期。
附上forfiles.exe及帮助。
删除所有的空目录(以删除d:\test目录下为例)Dir /ad/b/s d:\test\|sort/r d:\kill.txtFor/f”tokens=*”%%i in(d:\kill.txt)DO rd”%%I”del d:\kill.txt把以下复制到bat文件中。
@echo offforfiles /pd:\test/s/m*.*/d-7/c”cmd/c del@path”dir/ad/b/s d:\test\|sort/r dkill.txtFor/f”tokens=*”%%i in(d:\kill.txt) DO rd “%%I” del d:\kill.txt先删过期文件再删所有的空目录如果操作系统是Windows Server 2003那就好办了,因为它有一个forfiles命令能够查找满足指定条件的文件下面是这个命令的用法。
批处理bat删除指定天数日期之前的文件夹
批处理bat删除指定天数⽇期之前的⽂件夹【⽅案⼀】BAT + REG + VBS复制代码代码如下:@echo off::演⽰:删除指定路径下指定天数之前(以⽂件夹的最后修改⽇期为准)的⽂件夹。
::如果演⽰结果⽆误,把rd前⾯的echo去掉,即可实现真正删除。
::本例调⽤了临时VBS代码进⾏⽇期计算::本例为兼容不同的⽇期格式,调⽤reg命令(XP系统⾃带)统⼀设置⽇期格式,::处理完毕之后再把⽇期格式恢复成原来的状态。
rem 指定待删除⽂件夹的存放路径set SrcDir=C:/Testrem 指定天数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%/DstDate.vbs" echo LastDate=date()-%DaysAgo%>>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)>>"%temp%/DstDate.vbs" echo wscript.echo FmtDatefor /f %%a in ('cscript /nologo "%temp%/DstDate.vbs"') do (set "DstDate=%%a")set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%for /d %%a in ("%SrcDir%/*.*") do (if "%%~ta" leq "%DstDate%" (if exist "%%a/"echo rd /s /q "%%a")))reg add "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul pause【⽅案⼆】BAT + REG + Ritchie Lawrence ⽇期函数复制代码代码如下:@echo off::演⽰:删除指定路径下指定天数之前(以⽂件夹的最后修改⽇期为准)的⽂件夹。
获取当前日期的前后N天日期的方法
获取当前⽇期的前后N天⽇期的⽅法//获取当前⽇期的前后N天⽇期的⽅法function GetDateStr(AddDayCount){var dd = new Date();dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的⽇期var y = dd.getFullYear();var m = (dd.getMonth()+1)<10?"0"+(dd.getMonth()+1):(dd.getMonth()+1);//获取当前⽉份的⽇期,不⾜10补0 var d = dd.getDate()<10?"0"+dd.getDate():dd.getDate(); //获取当前⼏号,不⾜10补0return y+"-"+m+"-"+d;}/*console.log("半年前:"+GetDateStr(-180));console.log("<br />三⽉前:"+GetDateStr(-90));console.log("<br />⼀⽉前:"+GetDateStr(-30));console.log("<br />昨天:"+GetDateStr(-1));console.log("<br />今天:"+GetDateStr(0));console.log("<br />明天:"+GetDateStr(1));console.log("<br />后天:"+GetDateStr(2));console.log("<br />⼀⽉后:"+GetDateStr(30));console.log("<br />三⽉后:"+GetDateStr(90));console.log("<br />半年后:"+GetDateStr(180));console.log("<br>"+new Date().getFullYear());*/。
Python根据指定日期计算后n天,前n天是哪一天的方法
2017-09-05 2017-08-22
这里再补充一个Python使用time模块计算100 天以后的日期示例:
# -*- coding:utf-8 -*#!/usr/bin/python3 import time time.strftime('%Y%m%d') import datetime now_time = datetime.datetime.now() future_time = now_time + datetime.timedelta(days=100) fu = future_time.strftime('%Y%m%d') print(int(fu))
最近的一个工程项目是讲文字添加到图像上所以下面这篇文章主要给大家介绍了关于利用python自带pil库扩展图片大小给图片加文字描述的相关资料文中通过示例代码介绍的非常详细需要的朋友可以参考借鉴下面来一起看看吧
Pythonthon根据指定日期计算后n天,前n天是哪一天的方法。分享给大家供大家参考,具体如下:
计算结果:
20180906
PS:这里再为大家推荐几款相关在线工具供大家参考:
更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家Python程序设计有所帮助。
# -*- coding:utf-8 -*#!/usr/bin/python3 import datetime def getday(y=2017,m=8,d=15,n=0): the_date = datetime.datetime(y,m,d) result_date = the_date + datetime.timedelta(days=n) d = result_date.strftime('%Y-%m-%d') return d print(getday(2017,8,15,21)) #8月15日后21天 print(getday(2017,9,1,-10)) #9月1日前10天
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 开启变量延迟
setlocal enabledelayedexpansion
set baseDir=D:
rem == 需要输入参数 agoDays
rem 设定天数(0~365)
set agoDays=30
if agoDays EQU "" set agoDays=60
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+D
if !MM! EQU 2 set M_2829=D
if !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 "!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 %agoDays% GTR 365 set agoDays=365
rem 初始化新日期
set newDate=0
rem 日志文件
set logFile=%baseDir%\logs.txt
echo ==== Begin %date% %time% ==== >>%logFile%
REM echo %date% %time% >>%logFile%
rem 调用子函数获取几天前的日期
call :date2days2date %agoDays%
echo newDate=!newDate!>>%logFile%
goto endLoop
rem 获取当前时间的目录名
:date2days2date
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"
set agoDays=%1
set curDays=0
for /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!