|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
16 楼』:
Quote: | Originally posted by wfy150 at 2008-5-31 06:33 PM:
问下这个set/a !变量!中的"!"是怎么用的? |
|
搜索 变量延迟详解
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-5-31 18:34 |
|
|
hyu029
新手上路
积分 14
发帖 7
注册 2007-12-16
状态 离线
|
|
2008-6-1 01:56 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
18 楼』:
我来剖析下这个问题:
&&这个问题看似简单,实际上复杂的要死,要写出完全通用的代码就必须涉
及到如下问题:
一、对分的判断,判断当前分减去40是不是小于0,如小于0则应加上60,并
把时减去1;
二、对时的判断,判断当前时减去1是不是小于0,如小于0则要加24,并把天
减去1;
三、对日的判断,判断当前天减1是不是等于0,如等于0,则把日设成上月的
最后一天(这里还要对上月的最后一天进行判断是为31还是30还是29还是28),
并将月减1;
四、对月的判断,判断当前月减1是不是等于0,如等于0,则把月设为12月,
并将年减1;
五、对年的判断,要判断是不是闰年,是的就要将2月设为29天,不是的将2
月设为28天(闰年标准判断法:能被4整除但不能被100整除以及能被400整除的
年为闰年)。
如当前时间为2100-03-01 0:00:10要判断起来就是件很麻烦的事!!!
[ Last edited by zw19750516 on 2008-6-1 at 03:12 AM ]
|
批处理之家新域名:www.bathome.net |
|
2008-6-1 02:57 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
19 楼』:
我给的答案:
代码确实有点吓人,但应该是通用的:
@echo off&setlocal enabledelayedexpansion
set /a y=%date:~,4%,m=100%date:~5,2%%%100,d=100%date:~8,2%%%100,mi=100%time:~3,2%%%100
if "%time:~,1%"=="" (set h=%time:~1,1%) else (set h=%time:~,2%)
set /a a=%y%%%4,b=%y%%%100,c=%y%%%400
if %c% equ 0 (set yun=A) else (if %a% equ 0 if %b% neq 0 set yun=A)
if defined yun (set n=29) else (set n=28)
set /a mi-=40,h-=1
if %mi% lss 0 set /a mi+=60,h-=1
if %h% lss 0 set /a h+=24,d-=1
if %d% equ 0 set /a m-=1&goto lp
:cont
for %%i in (%y% %m%) do if %%i lss 10 (set str=!str!0%%i) else (set str=!str!%%i)
for %%i in (%d% %h% %mi%) do if %%i lss 10 (set var=!var!0%%i) else (set var=!var!%%i)
for /f "tokens=1,2,3,4,5,7 delims=-/: " %%a in ('dir /s /a-d *.*') do (
if %%a%%b lss %str% (
echo.%%f
) else (
if %%a%%b equ %str% if %%c%%d%%e lss %var% echo.%%f
)
)
pause>nul&goto :eof
:lp
if %m% equ 2 set d=%n%&goto cont
if %m% equ 0 set m=12&set /a y-=1
for %%i in (1 3 5 7 8 10 12) do if %%i equ %m% set d=31&goto cont
for %%i in (4 6 9 11) do if %%i equ %m% set d=30&goto cont [ Last edited by zw19750516 on 2008-6-1 at 04:48 AM ]
|
批处理之家新域名:www.bathome.net |
|
2008-6-1 04:38 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
20 楼』:
也发一个对年月日的判断 欢迎测试
@echo off&set tt=0
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
for /f "tokens=1-3 delims=:" %%i in ('time/t') do set /a t1=100%%i%%100,t2=100%%j%%100
set/a t1-=1,t2-=40
if %t2% lss 0 set/a t2+=60,t1-=1
if %t1% lss 0 set/a tt+=1,t1+=24
if %p3% gtr %tt% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
if %p3% leq %tt% goto nxt
:ppp
setlocal enabledelayedexpansion
set/a p3=%p3%-%tt%
for %%i in (p2 p3 t1 t2) do if "!%%i!" lss 10 set %%i=0!%%i!
for /f "tokens=*" %%i in ('dir /b /a-d "*.*" 2^>nul') do (
set "ta=%%~ti"
if not "%%~fi" == "%~f0" (
if "!ta:~0,4!!ta:~5,2!!ta:~8,2!!ta:~11,2!!ta:~14,2!" leq "!p1!!p2!!p3!!t1!!t2!" echo "%%~fi"
))
pause
|
简单!简单!再简单! |
|
2008-6-1 15:07 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
|
2008-6-1 16:24 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
22 楼』:
我不是鸟人 这个鸟语还真看不懂 一个一个分开还差不多 哈哈 玩笑了
|
简单!简单!再简单! |
|
2008-6-1 18:01 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
23 楼』:
Quote: | Originally posted by terse at 2008-6-1 15:07:
也发一个对年月日的判断 欢迎测试
if "!ta:~0,4!!ta:~5,2!!ta:~8,2!!ta:~11,2!!ta:~14,2!" leq "!p1!!p2!!p3!!t1!!t2!" echo "%%~fi"
)) |
|
&&这个好像是比较不了大小的,举个例子200805120728(2008年5月12日7
时28分)数值的总位数为12位超出了CMD所能处理的最大数值2147483647,所
以要把它分成两段来比较,我是先将前面的年月数值进行比较,如相同再比较后
面的天时分的数值。
|
批处理之家新域名:www.bathome.net |
|
2008-6-1 19:40 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
24 楼』:
Quote: | Originally posted by zw19750516 at 2008-6-1 07:40 PM:
&&这个好像是比较不了大小的,举个例子200805120728(2008年5月12日7
时28分)数值的总位数为12位超出了CMD所能处理的最大数值2147483647 ... |
|
加上引号后 if判断是以ascii码大小一个一个往后判断,原理上可以判断任意大的数。
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-6-1 20:26 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
25 楼』:
不错,所以terse兄有 set %%i=0!%%i! 这样的处理过程,保证了位数是一样的,所以可以判断任意大的数。
[ Last edited by 26933062 on 2008-6-1 at 08:30 PM ]
|
致精致简! |
|
2008-6-1 20:28 |
|