标题: [日期时间] [已解决]批处理如何判断小于当前时间5分钟的文件? [打印本页]
作者: 437153 时间: 2015-5-9 21:04 标题: [已解决]批处理如何判断小于当前时间5分钟的文件?
本帖最后由 437153 于 2015-5-10 01:44 编辑
- for %%i in (t\*.wav) do (lame.exe %%i %~ni.mp3 & del %%i)
复制代码
在目录t下面有很多wav格式,我用一个批处理实现将wav转换为MP3
但是这样不是很理想,我想实现只转换当前时间5分钟之前的文件。
我自己尝试写了一下,发现写不出来
我的思路是通过【for】的【%~tI】参数获取文件的【修改时间】
然后与当前日期%now%判断
set/a mm=%time:~3,2%-5
set now=%date:~0,10% %time:~0,3%%mm%
实在是写不出来该怎么判断了,只好厚颜来求教各位高手了!!
目前已经找到两个方法实现:
1、@CrLf 大神的第三方HASH工具实现- @echo off
- for /f "delims=" %%a in ('hash /nh /t::~-5m') do (lame.exe %%i %~ni.mp3 & del %%i)
- pause
复制代码
2、@hanyeguxing 版主的修改电脑日期格式的方法实现(代码完全看不懂,好神秘的感觉!!!)
http://bbs.bathome.net/viewthrea ... amp;page=1#pid68535
1,要求:
%%~ta 输出时间为2011-01-12 08:05
%date% 的格式为2011-01-12 ......
%time% 的格式为 8:27:35.25
2,当超过5分钟时,执行 echo 超过时间,可以根据需要改变
3,超时时间为5分钟,单位分,由命令 set/a K=%K: =%*60+1%time:~3,2%-100-5 设置。根据需要可以修改最后这个数字5,范围1-1439- @echo off
- set K=%time:~0,2%
- set/a K=%K: =%*60+1%time:~3,2%-100-5,D=1%date:~8,2%-100
- set/a D-=!!(%K:-=%-K),K+=!!(%K:-=%-K)*1440,H=K/60,F=K-60*H,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)"
- set M=0%M%&set D=0%D%&set F=0%F%&set H=0%H%
- for %%a in ("D:\日志.log") do if "%Y%-%M:~-2%-%D:~-2% %H:~-2%:%F:~-2%" gtr "%%~ta" echo 超过时间
复制代码
作者: Batcher 时间: 2015-5-9 21:13
参考
http://bbs.bathome.net/thread-10737-1-1.html
http://bbs.bathome.net/thread-3056-1-1.html
作者: 437153 时间: 2015-5-9 22:01
回复 2# Batcher
首先很感谢您的热心回复,我看了帖子。尝试着再次写一下,但是结果出了些意外,得不到我想到的结果。- @echo off
- set riqi=%date:~0,4%%date:~5,2%%date:~8,2%
- set /a shijian=%time:~0,2%%time:~3,2%-5
- set xianzai=%riqi%%shijian%
-
- for %%i in (d:\t\*.txt) do (set b=%%~ti
- set a=%b:~0,4%%b:~5,2%%b:~8,2%%b:~11,2%%b:~14,2%
- if %a% lss %xianzai% (echo yes)
- )
复制代码
这里%a%不刷新,一直是最后一个文件的修改日期。搞不明白,希望您能再次得到您的指导。
作者: CrLf 时间: 2015-5-9 22:06
本帖最后由 CrLf 于 2015-5-9 22:57 编辑
使用第三方工具 hash.exe- @echo off
- for /f "delims=" %%a in ('hash /nh /t::~-5m') do (lame.exe %%i %~ni.mp3 & del %%i)
- pause
复制代码
原先取的是 5 分钟内修改过的文件,和楼主的要求反掉了
已修改
作者: 437153 时间: 2015-5-9 22:47
回复 4# CrLf
感谢回复。hash工具貌似很强大,但是有几个疑问:
1、
正儿八经的用法都在 测试与示例.rar 里了,这里举几个非主流的例子:
@for /f "tokens=1* delims==" %%a in ('hash /t:-30 /debug:timestru_min') do echo %%b
rem 获取 30 天前的日期
- D:\t>hash /t:-30
- 日期 文件名
- =================== ================
- 2015/05/09 22:18:57 1.bat
- 2015/05/09 19:58:11 1.txt
- 2015/05/09 22:13:13 2.txt
- 2015/05/09 22:19:40 3.txt
-
- D:\t>hash /t:-5m
- 日期 文件名
- =================== ================
-
- D:\t>
复制代码
这里获取5分钟之前的文件,显示没有内容?
作者: CrLf 时间: 2015-5-9 22:56
本帖最后由 CrLf 于 2015-5-9 22:59 编辑
回复 5# 437153
哦,是之前,取反了,那就加个波浪号,完整格式是 [修改时间始于]~[修改时间结束于],但可以省略 ~ 任意一边,表示上/下不封顶复制代码
4 楼代码已修改
作者: 437153 时间: 2015-5-9 23:18
回复 6# CrLf
哦,原来是这样啊。挺好用的。感谢!!
作者: CrLf 时间: 2015-5-9 23:23
回复 7# 437153
如果只要干净的文件名,那就加 /nh 屏蔽标题栏,并双写 :: 只使用条件筛选而不显示时间复制代码
如果要完整路径,再加个 /d
作者: 437153 时间: 2015-5-9 23:56
回复 8# CrLf
恩,我看了详细的说明。非常实用的工具。我想工作中很多地方都能用到。感谢你的分享!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |