中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-07 14:39
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【求助】请问如何判断文件修改时间及创建时间? 查看 1,259 回复 10
楼 主 【求助】请问如何判断文件修改时间及创建时间? 发表于 2008-02-20 18:00 ·  中国 广东 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
刚开始学批处理...现在要做一个根据文件修改或创建时间来提示文件是否正确的批处理...请问各位高手应该如何实现?
相关的资料我只看到for 的应用里有个%%~ti之类的....
2 发表于 2008-02-20 18:47 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
根据文件修改或创建时间来提示文件是否正确的批处理...? 啥意思,根据时间验证批处理本身?
@echo off
for /f "tokens=1" %%a in ('dir/tc "%~0"^|find "%~n0"') do echo %%a
pause
第一高手 第二高手

3 发表于 2008-02-20 18:57 ·  中国 广东 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
比如说...判断文件a.txt的创建时间或是修改时间...如果为当天则
ECHO A.TXT正常
4 发表于 2008-02-20 19:18 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
@echo off
set aDate=%date:~0,-4%
for /f "tokens=1" %%a in ('dir/tc "a.txt"^|find "a.txt"') do if "%%a"=="%aDate%" (echo 是) else (echo 不是)
pause
第一高手 第二高手

5 发表于 2008-02-21 11:06 ·  中国 广东 深圳 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
先感谢下楼上的....不过程序我还是不大明白...
似乎我这里最后运行结果始终会显示为不是..
在命令行输入for /f "tokens=1" %a in ('dir/tc "a.txt"^|find "a.txt"') do echo %a
无论我怎么修改系统时间...输出都是2008-02-14
tokens=2输出则为17:36
请问这个tokens是怎么判断的?
我一直以为tokens是取第几个字符的....

for /f "tokens=1" %%a in ('dir/tc "a.txt"^|find "a.txt"')
find "a.txt"是指查找文件名?^起了什么作用?
6 发表于 2008-02-21 11:30 ·  中国 广东 深圳 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
...突然发现个问题...之前的1.txt似乎是2-14号建立的...我shift+del掉后新建一个1.txt...建立时间仍然为2-14 17:36
不知道在什么情况下某次删除后新建变成了21号....而且再次删除后新建文件建立时间也仍然是在21号10点之前的点上....只有修改时间在变化
然后我在当前目录下新建111.txt后...再新建1.txt..创建时间就变化了..但有时又没有..一头雾水中...
4楼给的程序运行是没有问题的..但仍然还有5楼的疑问..望高手能解答下.

[ Last edited by simplenoughappy on 2008-2-21 at 11:44 AM ]
7 发表于 2008-02-21 12:09 ·  中国 广东 深圳 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
for /f "tokens=1" %%a in ('dir/tc "a.txt"^|find "a.txt"')
find "a.txt"是不是指查找a.txt这个文件名然后查找出来指定了这一行?
当我把^|find "a.txt"删了后运行后执行提示
不是
不是
不是

不是
不是
看起来是对应了dir/tc "a.txt后的结果:
驱动器D中的卷没有标签
卷的序列号是3CDB-4171
D:\的目录
2008-02-21 10:39 0 1.txt
1个文件 0字节
0个目录 15,034,200,064字节
这样的话tokens=1便是说在a.txt的那一行以空格为默认分隔符的第一个字符(串)?
对这些东西概念还是很模糊.望高手能给个详细说明..
而|管道符应该是指把dir部分作为find的输入..但^作为取消|的转义作用还是不明白
而且程序中没有这个^会运行不正确....
8 发表于 2008-02-21 12:11 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by simplenoughappy at 2008-2-21 11:06:
先感谢下楼上的....不过程序我还是不大明白...
似乎我这里最后运行结果始终会显示为不是..
在命令行输入for /f "tokens=1" %a in ('dir/tc "a.txt& ...


for /f 默认空格为分隔 tokens=1表示截取空格前1串字符
第一高手 第二高手

9 发表于 2008-02-21 12:14 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by simplenoughappy at 2008-2-21 12:09:
for /f "tokens=1" %%a in ('dir/tc "a.txt"^|find "a.txt"')
find "a.txt"是不是指查找a.txt这个文件名然后查找出来指定了这一行?
当我把 ...


这个自己运行下dir/tc "a.txt"|find "a.txt"就知道了
测试代码,在代码前加 echo
for /f "tokens=1" %%a in ('dir/tc "a.txt"^|find "a.txt"') do echo if "%%a"=="%aDate%" (echo 是) else (echo 不是)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
simplenoughappy +1 2008-02-21 17:02
第一高手 第二高手

10 发表于 2008-02-21 13:17 ·  中国 广东 深圳 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
Originally posted by fastslz at 2008-2-21 12:14 PM:


这个自己运行下dir/tc "a.txt"|find "a.txt"就知道了
测试代码,在代码前加 echo
for /f "tokens=1" %%a in ('dir/tc "a.txt"^|find "a ...

在命令行直接输入dir/tc "a.txt"|find "a.txt"为
2008-02-21 10:38 0 a.txt

在命令行直接输入dir/tc "a.txt"^|find "a.txt"为
驱动器D中的卷没有标签
卷的序列号是3CDB-4171
D:\的目录
D:\的目录-----------------------(为什么会有2个呢)
2008-02-21 10:39 0 1.txt
1个文件 0字节
0个目录 15,034,200,064字节

在批处理中改成dir/tc "a.txt"|find "a.txt"后运行会有一个窗口一闪而过提示:
此时不应有|

是说明批处理文件和命令行直接输入的差异么?

后面的ECHO输出了"2008-02-21"=="2008-02-21"
测试代码时都需要用ECHO这种方法比较好么.....
11 发表于 2008-02-21 17:01 ·  中国 广东 深圳 电信
初级用户
积分 42
发帖 19
注册 2008-02-18 15:56
18年会员
UID 110899
性别 男
状态 离线
CMD在解释FOR命令时,首先的工作是将一个完整的FOR命令读入,但在读取(set)中若发现|&符号,便会进行上述的组合初始化工作,很显然,CMD会在这里报错,命令是不能正确执行的,但为什么加上^符号便可以正常执行,而不是让CMD将|&当做单纯的字符来处理?
其实CMD的确将加了^的|&符号当做字符来处理了,而只所以能正常执行,是因为这一步处理是发生在CMD读入FOR整个命令行的过程中,而不是FOR接管后将(set)提交给CMD的过程中,下边来看看过程

CMD读入前:for /f %i in (echo a^&echo b) do echo %i

CMD读入后:for /f %i in (echo a&echo b) do echo %i

FOR提交时:CMD<(echo a&echo b)

嗯...在论坛的帖子里面看到这个了..大概懂了....嗯..我自己多试试了..
非常感谢fastslz的帮助....刚来论坛..看来这的确是个不错的地方..
论坛跳转: