[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] [已解决]批处理如何判断小于当前时间5分钟的文件?

本帖最后由 437153 于 2015-5-10 01:44 编辑
  1. 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工具实现
  1. @echo off
  2. for /f "delims=" %%a in ('hash /nh /t::~-5m') do (lame.exe %%i %~ni.mp3 & del %%i)
  3. 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
  1. @echo off
  2. set K=%time:~0,2%
  3. set/a K=%K: =%*60+1%time:~3,2%-100-5,D=1%date:~8,2%-100
  4. 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)"
  5. set M=0%M%&set D=0%D%&set F=0%F%&set H=0%H%
  6. for %%a in ("D:\日志.log") do if "%Y%-%M:~-2%-%D:~-2% %H:~-2%:%F:~-2%" gtr "%%~ta" echo 超过时间
复制代码

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    首先很感谢您的热心回复,我看了帖子。尝试着再次写一下,但是结果出了些意外,得不到我想到的结果。
  1. @echo off
  2. set riqi=%date:~0,4%%date:~5,2%%date:~8,2%
  3. set /a shijian=%time:~0,2%%time:~3,2%-5
  4. set xianzai=%riqi%%shijian%
  5. for %%i in (d:\t\*.txt) do (set b=%%~ti
  6. set a=%b:~0,4%%b:~5,2%%b:~8,2%%b:~11,2%%b:~14,2%
  7. if %a% lss %xianzai% (echo yes)
  8. )
复制代码
这里%a%不刷新,一直是最后一个文件的修改日期。搞不明白,希望您能再次得到您的指导。

TOP

本帖最后由 CrLf 于 2015-5-9 22:57 编辑

使用第三方工具 hash.exe
  1. @echo off
  2. for /f "delims=" %%a in ('hash /nh /t::~-5m') do (lame.exe %%i %~ni.mp3 & del %%i)
  3. pause
复制代码
原先取的是 5 分钟内修改过的文件,和楼主的要求反掉了
已修改

TOP

回复 4# CrLf


    感谢回复。hash工具貌似很强大,但是有几个疑问:
1、
正儿八经的用法都在 测试与示例.rar 里了,这里举几个非主流的例子:
@for /f "tokens=1* delims==" %%a in ('hash /t:-30 /debug:timestru_min') do echo %%b
rem 获取 30 天前的日期
  1. D:\t>hash /t:-30
  2. 日期                文件名
  3. =================== ================
  4. 2015/05/09 22:18:57 1.bat
  5. 2015/05/09 19:58:11 1.txt
  6. 2015/05/09 22:13:13 2.txt
  7. 2015/05/09 22:19:40 3.txt
  8. D:\t>hash /t:-5m
  9. 日期                文件名
  10. =================== ================
  11. D:\t>
复制代码
这里获取5分钟之前的文件,显示没有内容?

TOP

本帖最后由 CrLf 于 2015-5-9 22:59 编辑

回复 5# 437153


    哦,是之前,取反了,那就加个波浪号,完整格式是 [修改时间始于]~[修改时间结束于],但可以省略 ~ 任意一边,表示上/下不封顶
  1. hash /t:~-5m
复制代码
4 楼代码已修改

TOP

回复 6# CrLf


    哦,原来是这样啊。挺好用的。感谢!!

TOP

回复 7# 437153


如果只要干净的文件名,那就加 /nh 屏蔽标题栏,并双写 :: 只使用条件筛选而不显示时间
  1. hash /nh /t::~-5m
复制代码
如果要完整路径,再加个 /d

TOP

回复 8# CrLf


    恩,我看了详细的说明。非常实用的工具。我想工作中很多地方都能用到。感谢你的分享!!!

TOP

返回列表