批处理 查找选择文件夹中最新文件

在C:/A文件夹中有多个数据库备份文件,全备份文件名为database_full_备份时间.bak,差异备份文件名为database_diff_备份时间.bak,我想写一... 在C:/A 文件夹中有多个数据库备份文件,全备份文件名为database_full_备份时间.bak,差异备份文件名为database_diff_备份时间.bak,我想写一个批处理来选择最新的备份文件,规则如下:
1、如果最新的备份文件为全备份文件,则直接复制全备份文件到文件目录C:/B
2、如果最新的备份文件为差异备份文件,则还需要再找到最后一次的全备份文件,然后将两个文件复制到文件目录C:/B

批处理实在不是很懂,哪位高手帮帮忙,非常感谢!
展开
 我来答
伈雨_
2013-08-28 · TA获得超过299个赞
知道小有建树答主
回答量:233
采纳率:100%
帮助的人:91.5万
展开全部

批处理不能筛选秒级的文件,用vbs吧灵活自由随意,具体的还得看你的时间是文件名中的时间还是文件的修改时间?

option explicit
dim count,filetime(),filename(),timecompare(1),con,Copypath_target,originalpath_target,FormatPath,file_extensionname,fso,filelist,file,count1,filetime1(),filename1(),con1
set fso=createobject("scripting.filesystemobject")
file_extensionname="bak"
originalpath_target="C:\A"                '源路径
Copypath_target="C:\B"               '目标目录
if right(copypath_target,1)<>"\" then copypath_target=copypath_target&"\"   '用于格式化路径
for each filelist in fso.getfolder(originalpath_target).files
 if fso.getextensionname(filelist.name)=file_extensionname then        '如果文件后缀名是bak则执行下面的代码
if instr(lcase(filelist),"full")>0 or instr(lcase(filelist),"diff")>0 then
  redim preserve filetime(count)
  redim preserve filename(count)
  filetime(count)=filelist.dateLastmodified      '获取文件修改时间,并存入数组
  filename(count)=filelist.path            '获取文件名,并存入数组
  count=count+1                '为数组计数
 end if
 end if
 next 
if fso.folderexists(copypath_target)=false then fso.createfolder copypath_target '如果路径不存在则新建一个文件夹
Compare filetime,con                '比较文件时间
file=filename(con)
if instr(file,"diff")>0 then
for each filelist in fso.getfolder(originalpath_target).files
 if fso.getextensionname(filelist.name)=file_extensionname then        '如果文件后缀名是bak则执行下面的代码
if instr(lcase(filelist),"full")>0 then
  redim preserve filetime1(count1)
  redim preserve filename1(count1)
  filetime1(count1)=filelist.dateLastmodified      '获取文件修改时间,并存入数组
  filename1(count1)=filelist.path            '获取文件名,并存入数组
  count1=count1+1                '为数组计数
 end if
 end if
 next
 Compare filetime1,con1
 fso.copyfile filename1(con1),Copypath_target
 quit
end if
 fso.copyfile filename(con),Copypath_target
Public Function Compare(byref Arr,byref CountArr)         '比较大小
 Dim ListCount
 Compare = Arr(LBound(Arr))              '随便拿一个数组中的时间进行依次比较
 For ListCount = UBound(Arr) To LBound(Arr) Step -1
  If Arr(ListCount) >= Compare Then
   CountArr = ListCount             '记录数组元素
   Compare = Arr(ListCount)            '为数组元素赋值并获取最新时间
  End If
 Next
End Function
quit 
public function quit()
set fso=nothing
wscript.quit
end function
追问
vbs要怎么使用呢??我想做批处理可以做定时任务,定时执行,也可以用户执行批处理文件执行
追答
保存文件为vbs后缀名的文件,和批处理一样,代码保存记事本?定时你用系统自带的计划任务就可以了
yyykkkyyyy
2013-08-27 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3310万
展开全部
@echo off
cd/d "c:\A"
for %%i in (full diff)do (
  for /f "tokens=3 delims=_" %%j in (
  'dir/b/on database_%%i_*.bak')do set "%%i=%%j")
copy "database_full_%full%.bak" "C:\B\"
if "%diff%" gtr "%full%" copy "database_diff_%diff%.bak" "C:\B\"
pause

 注:此代码为按文件名排序取的最新文件,保存为xx.bat 文件可放任意位置运行

更多追问追答
追问

你好,下面的批处理是找别人帮我写的,但是有个问题就是取文件不太准确,按图片中的内容,我想取的数据是database_diff_20130906001000.bak和database_full_20130903003000.bak这两个文件,但是下面的批处理执行出来的结果确实database_full_20130831003000.bak,你能帮我修改下吗,非常感谢!


追答
我认为之前代码能够达到要求,答了这长时间了按说你是试过的,有问题吗?
这追问说别人帮你写的既然是为了同一问题,如果我的代码没问题就没必要再修改什么了,何况我又没见到他的代码怎么帮你修改?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式