[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
知道更多思路是好事,实际使用需要根据情况来决定
例如:一天前的日期的获取,要求 %date% 形如2011-01-24 ......
  1. @echo off
  2. set/a D=1%date:~8,2%%%100-1,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M,M+=!M*12,"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)"
  3. set M=0%M%&set D=0%D%
  4. Echo;%Y%-%M:~-2%-%D:~-2%&pause
复制代码
在这里:
D=1%date:~8,2%%%100-1 当前日期减1
M=1%date:~5,2%%%100-!D 如果D为0,则M减1,否则M不变
Y=%date:~0,4%-!M 如果M为0,则Y减1,否则Y不变
M+=!M*12 如果M为0,则令M为12,否则M不变
"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)" 如果M为4或6或9或11,令K为1,其他时候为0
D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31) 这里!D* :如果D为非0,则D不变,如果D为0,则D为(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)
而(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)中,如果M为4或6或9或11,则D为30;如果M为1或3或5或7或8或10或12时,D为31;如果M为2时,若闰年D为29,若非闰年,D为28
在这一个set/a中,完成了大量的if判断
所以楼主的思路放到复杂运算中,效果会很好,但放到非数字的一般字符逻辑中,效果就不明显

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

TOP

回复 4楼 的帖子

条件:(区分大小写,不存在敏感字符)
变量%a%为a,%b%不为b时
或者
变量%a%为a,变量b、c、d分别为b、c、d时
或者
%d%为d-时
满足以上条件时显示ok:
  1. if "%a%"=="a" (
  2. if not "%b%"=="b" set n==
  3. if "%b%|%c%|%d%"=="b|c|d" set n==
  4. )
  5. if "%d%"=="d-" set n==
  6. if defined n echo ok
复制代码
这里 | 为变量值中不存在的字符

[ 本帖最后由 hanyeguxing 于 2011-1-24 20:10 编辑 ]
1

评分人数

    • zhoubin: 我试了一下,还是这个好!!!技术 + 1
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表