中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【求助】请问如何判断文件修改时间及创建时间?
作者:
标题: 【求助】请问如何判断文件修改时间及创建时间? 上一主题 | 下一主题
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『楼 主』:  【求助】请问如何判断文件修改时间及创建时间?

刚开始学批处理...现在要做一个根据文件修改或创建时间来提示文件是否正确的批处理...请问各位高手应该如何实现?
相关的资料我只看到for 的应用里有个%%~ti之类的....

2008-2-20 18:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  

根据文件修改或创建时间来提示文件是否正确的批处理...? 啥意思,根据时间验证批处理本身?
@echo off
for /f "tokens=1" %%a in ('dir/tc "%~0"^|find "%~n0"') do echo %%a
pause




第一高手    第二高手

2008-2-20 18:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『第 3 楼』:  

比如说...判断文件a.txt的创建时间或是修改时间...如果为当天则
ECHO A.TXT正常

2008-2-20 18:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  


@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




第一高手    第二高手

2008-2-20 19:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『第 5 楼』:  

先感谢下楼上的....不过程序我还是不大明白...
似乎我这里最后运行结果始终会显示为不是..
在命令行输入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"是指查找文件名?^起了什么作用?

2008-2-21 11:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『第 6 楼』:  

...突然发现个问题...之前的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 ]

2008-2-21 11:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『第 7 楼』:  

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的输入..但^作为取消|的转义作用还是不明白
而且程序中没有这个^会运行不正确....

2008-2-21 12:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  



  Quote:
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串字符



第一高手    第二高手

2008-2-21 12:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  



  Quote:
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-2-21 17:02




第一高手    第二高手

2008-2-21 12:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『第 10 楼』:  



  Quote:
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这种方法比较好么.....

2008-2-21 13:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
simplenoughappy
初级用户





积分 42
发帖 19
注册 2008-2-18
状态 离线
『第 11 楼』:  

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的帮助....刚来论坛..看来这的确是个不错的地方..

2008-2-21 17:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: