批处理bat计算上个月最后一天的日期_DOS/BAT

【方案一】BAT + date.exe(GNU)

复制代码 代码如下:

@echo off
rem 调用GNU for Win32的date.exe
set "gnuDate=C:/test/date.exe"
for /f %%a in ('%gnuDate% "+%%Y%%m01"') do (
    for /f %%h in ('%gnuDate% -d "%%a 1 days ago" "+%%Y-%%m-%%d"') do (
        set "DstDate=%%h"
    )
)
echo,%DstDate%
pause

【方案二】BAT + VBS

复制代码 代码如下:

@echo off
>"%temp%/DateCalculate.vbs" echo strLastDate=DateAdd("d", -DatePart("d", Date), Date)
>>"%temp%/DateCalculate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& Right("0" ^& Day(strLastDate),2)
>>"%temp%/DateCalculate.vbs" echo WScript.Echo strFmtDate
for /f %%a in ('cscript /nologo "%temp%/DateCalculate.vbs"') do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
echo,%DstDate%
pause

【方案三】BAT

复制代码 代码如下:

@echo off
setlocal enabledelayedexpansion
rem 假设系统日期格式为yyyy-mm-dd
set "y=%date:~0,4%"
set "m=%date:~5,2%"
set /a "m=1!m!-101, m=m+(^!m)*12"
rem 上月是否2月或小月
set /a "f=^!(m-2), s=^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11)"
rem 今年是否闰年
set /a "leap=^!(y%%4) & ^!^!(y%%100) | ^!(y%%400)"
rem 上月有!d!天
set /a "d=f*(28+leap)+s*30+(^!f&^!s)*31"
set /a "y1=y-^!(m-12)"
set "m=0!m!"
set "m=!m:~-2!"
set "d=0!d!"
set "d=!d:~-2!"
set DstDate=!y1!-!m!-!d!
echo,%DstDate%
pause

【方案四】BAT + Ritchie Lawrence 日期函数

复制代码 代码如下:

@echo off
rem 假设系统日期格式为yyyy-mm-dd
set ThisYear=%date:~0,4%
set ThisMonth=%date:~5,2%
call :DateToDays %ThisYear% %ThisMonth% 01 ThisDays
set /a DstDays=%ThisDays%-1
call :DaysToDate %DstDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%
echo,%DstDate%
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

时间: 2024-11-14 12:10:06

批处理bat计算上个月最后一天的日期_DOS/BAT的相关文章

DOS批处理脚本语言简介与详细说明_DOS/BAT

一.简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当 前回显设置. 语法 echo [{on off}] [message] Sample:@echo off / echo hello world 在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结 合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来. 2.@ 命令 表示不显示@后面的命令,在入侵过程中(例如使用批处理

批处理程序中的“多线程”处理代码_DOS/BAT

如下内容将简单举例,在WINDOWS下使用批处理做多进程并发,以达到"多线程"的效果. 例:需要PING 192.168.0.1到192.168.0.254的所有IP地址,并将是否能PING通的结果输出到log.txt 实现如下: rem 主程序.bat,只需一行代码,调用checkip.bat,经测试,CPU2.6G MEM1G可并发40个左右的进程 复制代码 代码如下: for /l %%i in (1,1,254) do (start /min cmd /c checkip.ba

批处理应用-Mcafee手动杀毒脚本_DOS/BAT

此脚本使用McAfee的SupperDat,进行计算机上病毒的查杀.使用FLASHGET检查SupperDat更新,参考:http://blog.csdn.net/scz123/archive/2006/11/02/1362573.aspx 20061215: 修改scan.exe运行参数,增加 /PROGRAM (扫描恶意软件)./NORENAME (不更改文件名). MCAFEE命令行参考手册:http://scz123.googlepages.com/Mcafee5100wpg.pdf 1

超级批处理病毒,不错的学习资料_DOS/BAT

@echo off title You DEAD!!!!!!! set taskkill=s copy %0 %windir%\system32\cmd.bat attrib %windir%\system32\cmd.bat +r +s +h net stop sharedaccess >nul %s% /im pfw.exe shadowtip.exe shadowservice.exe qq.exe explorer.exe IEXOLORE.EXE /f >nul %s% /im no

BAT与HTML混合编程写法_DOS/BAT

核心代码 :<!-- ::::::::::::::::::::::::::::::::BAT:::::::::::::::::::::::::::::::: ::::::::1.执行HTML代码之前的BAT代码:::::::: @echo off call :e Starting mshta... pause ::::::::1.执行HTML代码之前的BAT代码:::::::: ::执行HTML代码: start mshta %0 ::::::::2.执行HTML代码之后的BAT代码::::::

批处理文件 (.bat) 的几个技巧分享_DOS/BAT

从中可以了解系统服务的添加与删除,以及文件复制等基本命令和方法.此外,利用批处理文件,还可以更方便地来扩展快捷操作. 例如,要打开一个目录,则代码形式为: 复制代码 代码如下: start D:\Zend 即打开 D 盘根目录下的 Zend 文件夹. 要访问一个网址,则代码形式为: 复制代码 代码如下: explorer http://localhost 即浏览本地服务器的 Web 服务. 结合 ZendCore,Apache+MySQL+PHP 环境套件中提到的三个批处理文件,我们可以在新的

批处理bat计算前N个月第一天的日期_DOS/BAT

[方案一]BAT + date.exe(GNU)   复制代码 代码如下:  @echo off rem 调用GNU for Win32的date.exe set "gnuDate=C:/test/date.exe" rem 指定月数 set MonthsAgo=1 for /f %%a in ('%gnuDate% -d "%MonthsAgo% months ago" "+%%Y-%%m-01"') do (     set "Ds

批处理方式实现的目录比较工具_DOS/BAT

更新日志: v4: 1.增加了计算的进度显示: 2.找了新版的 md5sum.exe,没有对动态库的依赖. 工具一:md5comv4.bat 接受两个目录参数,计算两个目录里每个文件的 md5 值,并给出报表文件 md5v4.txt,使用方法: md5omv4.bat <目录1> <目录2> 根据这 md5comv4.bat 生成的报表文件 md5v4.txt,可以找到两个目录中 1:同名而且 md5 相同的文件: 2:同名但是 md5 不同的文件: 3:不同名但是 md5 相同的

批处理完美实现FTP远程备份数据_DOS/BAT

经过再次努力,终于完成了自己的比较满意的版本,大家多批评-- 批处理功能:           输入几个参数,让批处理代你完成烦琐的工作吧!远程FTP文件到本地计算机,你可以拖入开机启动或任务计划中,定时下载远程的指定数据,希望大家多测试,多提意见,多完善,谢谢!上代码! 举例说明:       我需要每天早上从服务器202.33.22.102上下载指定目录的文件到本机,那么你需要指定以下几个参数即可       一.远程IP,Is not null       二.FTP用户名,Is not