[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
1,
原帖由 zc584267913 于 2010-5-2 07:50 发表
请问set od=!%mm%dd!其中的dd是如何定义的?是否代表的2dd/add/bdd,为何可以这样定义呢?

%mm%dd是变量名,!%mm%dd!是其变量的值,分别由以下代码定义:
for %%a in (1 3 5 7 8 10 12)do set %%add=31
set 2dd=28
if !pd2d!==0 set 2dd=29
for %%b in (4 6 9 11)do set %%bdd=30

实际存在的相关变量名为:1dd、2dd、3dd、4dd、5dd、6dd、7dd、8dd、9dd、10dd、11dd、12dd
例如for %%b in (4 6 9 11)do set %%bdd=30实际上分别定义的是4dd、6dd、9dd、11dd
例如当mm为5时,实际set od=!%mm%dd!就是执行set od=!5dd!,把5dd这个变量的值赋给od


2,上面的批处理不够严谨:
例如当月份或日期为08、09时,则产生set/a运算错误。
例如没有考虑闰年的严谨计算。
例如输出月份、日期不规范,要么都加前缀0,要么都不加。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do (set Y=%%a&set M=%%b&set D=%%c&if "!M:~0,1!"=="0" set M=!M:~1!
  3. if "!D:~0,1!"=="0" set D=!D:~1!)
  4. set/a D-=1&if !D! leq 0 (set/a M-=1&if !M!==0 set/a Y-=1,M=12
  5. set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31"+D)
  6. set M=0%M%&set D=0%D%&echo.昨天是%Y%年!M:~-2!月!D:~-2!日&pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-10 16:52 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表