中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-08 22:21
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助,如何找出100分钟前修改过的文件呢? 查看 2,096 回复 24
16 发表于 2008-05-31 18:34 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
Originally posted by wfy150 at 2008-5-31 06:33 PM:
问下这个set/a !变量!中的"!"是怎么用的?

搜索 变量延迟详解
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
17 发表于 2008-06-01 01:56 ·  中国 云南 昆明 电信
新手上路
积分 14
发帖 7
注册 2007-12-16 04:04
18年会员
UID 105794
性别 男
状态 离线
学习了
18 我来剖析下这个问题: 发表于 2008-06-01 02:57 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

&&这个问题看似简单,实际上复杂的要死,要写出完全通用的代码就必须涉
及到如下问题:
一、对分的判断,判断当前分减去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
19 我给的答案: 发表于 2008-06-01 04:38 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
代码确实有点吓人,但应该是通用的:

@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
20 发表于 2008-06-01 15:07 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
也发一个对年月日的判断 欢迎测试

@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
简单!简单!再简单!
21 发表于 2008-06-01 16:24 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
22 发表于 2008-06-01 18:01 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by plp626 at 2008-6-1 16:24:
要函数库干什么?
http://www.cn-dos.net/forum/viewthread.php?tid=39843&fpage=1&highlight=%E5%87%BD%E6%95%B0%E5%BA%93

我不是鸟人 这个鸟语还真看不懂 一个一个分开还差不多 哈哈 玩笑了
简单!简单!再简单!
23 发表于 2008-06-01 19:40 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
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
24 发表于 2008-06-01 20:26 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
Originally posted by zw19750516 at 2008-6-1 07:40 PM:


&&这个好像是比较不了大小的,举个例子200805120728(2008年5月12日7
时28分)数值的总位数为12位超出了CMD所能处理的最大数值2147483647 ...


加上引号后 if判断是以ascii码大小一个一个往后判断,原理上可以判断任意大的数。
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
25 发表于 2008-06-01 20:28 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
不错,所以terse兄有 set %%i=0!%%i! 这样的处理过程,保证了位数是一样的,所以可以判断任意大的数。

[ Last edited by 26933062 on 2008-6-1 at 08:30 PM ]
致精致简!
论坛跳转: