[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[练习]批处理计算上个月最后一天的日期

比如,今天是2010-03-15,运行代码之后能够输出上个月月末的日期2010-02-28。

允许使用BAT、VBS、第三方命令行工具。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

  1. @echo off & setlocal enabledelayedexpansion
  2. set "y=%date:~0,4%" & set "m=%date:~5,2%" & set /a "m=1!m!-101, m=m+(^!m)*12"
  3. set /a "f=^!(m-2), s=^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11)" & rem 上月是否2月或小月
  4. set /a "leap=^!(y%%4) & ^!^!(y%%100) | ^!(y%%400)" & rem 今年是否闰年
  5. set /a "d=f*(28+leap)+s*30+(^!f&^!s)*31" & rem 上月有 !d! 天
  6. set /a "y1=y-^!(m-12)"
  7. set "m=0!m!" & set "m=!m:~-2!" & set "d=0!d!" & set "d=!d:~-2!"
  8. echo 上个月月末的日期是 !y1!-!m!-!d!
  9. pause
复制代码
1

评分人数

TOP

  1. @echo off
  2. rem 调用GNU for Win32的date.exe
  3. set "gnuDate=C:\test\date.exe"
  4. for /f %%a in ('%gnuDate% "+%%Y%%m01"') do (
  5.     for /f %%h in ('%gnuDate% -d "%%a 1 days ago" "+%%Y-%%m-%%d"') do (
  6.         set "lastEndDay=%%h"
  7.     )
  8. )
  9. echo,%lastEndDay%
复制代码
Do All in Command Line

TOP

  1. WScript.echo DateAdd("d", -DatePart("d", Date), date)
复制代码

[ 本帖最后由 yangfengoo 于 2010-3-16 08:33 编辑 ]

TOP

  1. @echo off
  2. >"%temp%\DstDate.vbs" echo strLastDate=DateAdd("d", -DatePart("d", Date), Date)
  3. >>"%temp%\DstDate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& Right("0" ^& Day(strLastDate),2)
  4. >>"%temp%\DstDate.vbs" echo WScript.Echo strFmtDate
  5. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  6.     set "lastEndDay=%%a"
  7. )
  8. set lastEndDay=%lastEndDay:~0,4%-%lastEndDay:~4,2%-%lastEndDay:~6,2%
  9. echo,%lastEndDay%
复制代码
Do All in Command Line

TOP

  1. @echo off
  2. rem 调用Bill Stewart的DateX.exe
  3. set "xDate=C:\test\DateX.exe"
  4. rem 假设系统日期格式是yyyy-mm-dd
  5. set day=%date:~8,2%
  6. for /f %%a in ('"%xDate%" -o -%day%') do (
  7.     set "lastEndDay=%%a"
  8. )
  9. echo,%lastEndDay%
复制代码
Do All in Command Line

TOP

1.判断平润年。
2.设置1-12月最后一天的数值。
3.当前月减去1,再赋值即可。

TOP

本帖最后由 CrLf 于 2011-8-7 20:17 编辑
  1. @echo off
  2. set /a "m=1%date:~5,2%-101",y=%date:~,4%-!m","m+=!m*12,"d=30+(m-m/8)%%2-!(m-2)*2-!(m-2)*(!(y%%4)&!(!(y%%100))|!(y%%400))"
  3. echo %m%月%d%日
  4. pause
复制代码

TOP

本帖最后由 hanyeguxing 于 2011-8-7 19:37 编辑

回复 8# CrLf
CrLf 发表于 2011-8-6 21:12



    最好在 d= 的后面加入月份的修正计算 ,m+=!m*12
1

评分人数

    • CrLf: 感谢指正技术 + 1
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表