Board logo

标题: [代码合集] 批处理怎样获取指定文件夹里修改日期为最新的文件的完整路径 [打印本页]

作者: tianhanlove    时间: 2012-7-3 12:03     标题: 批处理怎样获取指定文件夹里修改日期为最新的文件的完整路径

本帖最后由 pcl_test 于 2016-8-6 18:31 编辑

批处理怎样获取指定路径下文件名?
现有个文件夹H:\backup,里面放的全是数据库备份文件,备份文件会每天自动生成一个,如DB20120702.001,DB20120701.001,现想做个批处理,放进任务计划中,让其每天自动去取该文件夹下最新产生的备份文件文件名,
最好是取出来的结果是这样,例:H:\backup\DB20120701.001,并放入到D:\backup.txt中,求高手赐教啊!
作者: garyng    时间: 2012-7-3 12:07

思路
用dir命令列出目录下的文件 然后用for截取文件创建时间 然后判断最新的 保存到Backup.txt
作者: tianhanlove    时间: 2012-7-3 12:13

回复 2# garyng

请问如何判断文件夹中,最新的文件,能稍微详细点吗,刚接触批处理,复杂点的还不懂。
作者: lky216    时间: 2012-7-3 13:10

本帖最后由 lky216 于 2012-7-3 13:27 编辑

每天最新的不是当天的日期创建的文件吗?那这样就好办,用date命令。
还是今天的备份昨天的?那试试这个
  1. @echo off
  2. set DaysAgo=1
  3. >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo%
  4. >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  5. >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
  6. for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
  7.   set DstDate=%%a
  8. )
  9. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  10. echo %DaysAgo%天之前(即昨天)的日期是:%DstDate%
  11. if exist "H:\backup\DB%DstDate:~0,4%%DstDate:~5,2%%DstDate:~8,2%.001" goto 1 ELSE goto 2
  12. :1
  13. echo 没有存在H:\backup\DB%DstDate:~0,4%%DstDate:~5,2%%DstDate:~8,2%.001这个文件
  14. pause&exit
  15. :2
  16. echo H:\backup\DB%DstDate:~0,4%%DstDate:~5,2%%DstDate:~8,2%.001>>D:\backup.txt
  17. pause
复制代码

作者: lky216    时间: 2012-7-3 13:12

用计划任务也可以,用echo wscript.sleep 86400000 > "%temp%\q.vbs"也可以
作者: tianhanlove    时间: 2012-7-3 13:30

回复 4# lky216


    谢谢!但问题是这样的,H:\backup 文件夹下的文件是每天晚上数据库自动备份下来的,因为有好几台服务器,各个服务器的数据库备份时间不统一,所以最新的备份文件创建时间不一定是昨天的,有些也是当天凌晨备份的,所以这个不能定死。
还有就是那个备份的文件名,我只是举了个例子叫DB20120701.001,实际上的文件名要远比这个复杂的多,db2 9.7备份文件的文件名如:DB_DMSA.0.DB2.NODE0000.CATN0000.20120627025011.001,所以取文件名这段代码不能根据时间来自定义了,估计要用dir来获取。能否帮忙再看下,谢谢!
作者: powerbat    时间: 2012-7-3 13:41

“最新”是根据什么?文件名中的日期,还是文件的创建时间?
作者: lky216    时间: 2012-7-3 13:47

回复 6# tianhanlove


    那没事呗,一天只有一个文件不是吗?一个批处理一次不是写入一个吗?那这样子就都有写入了,只是时间的问题。
作者: lky216    时间: 2012-7-3 13:51

“最新”是根据什么?文件名中的日期,还是文件的创建时间?
powerbat 发表于 2012-7-3 13:41



    文件名中的日期和,文件的创建时间,这两个都是比较新的吧?嘎嘎
作者: tianhanlove    时间: 2012-7-3 14:00

回复 7# powerbat


    文件的创建时间(修改时间也可以)吧,比如文件夹中
作者: apang    时间: 2012-7-3 15:53

这样可以吗?
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d /o-d /b /s H:\backup\*.*') do (
  3.   echo %%a>>d:\backup.txt
  4.   goto :eof
  5. )
复制代码

作者: tianhanlove    时间: 2012-7-3 16:04

回复 11# apang

太谢谢了,亲测了一下,可以了,取的是创建时间最新的文件名。但是能否再麻烦你下,因为我只想backup.txt中只存放一条记录,每次执行批处理的结果覆盖以往的记录,如何做到呢?
作者: apang    时间: 2012-7-3 16:43

本帖最后由 apang 于 2012-7-3 16:44 编辑

回复 12# tianhanlove
  1. (for /f "delims=" %%a in ('dir /a-d /b /o-d /s H:\backup\*.*') do @echo %%a&goto :eof)>d:\backup.txt
复制代码

作者: tianhanlove    时间: 2012-7-4 11:45

回复 13# apang
谢谢!完美解决!
作者: ww0000    时间: 2023-3-18 16:43

回复 13# apang


    这个好象不能获取子目录的文件?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2