日期:2014-05-16  浏览次数:21091 次

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

批处理实在不是很懂,哪位高手帮帮忙,非常感谢!

------解决方案--------------------
@echo off
setlocal enabledelayedexpansion
set src_dir=c:\a
set dst_dir=c:\b
set last_full_time=0
set last_diff_time=0

for /r "%src_dir%" %%a in (*) do (
  for /f "tokens=2,3 delims=_" %%b in ("%%~na") do (
    if "%%b"=="diff" (
      if %%c gtr !last_diff_time! (
        set last_diff_time=%%c
        set last_diff_name=%%a
      )
    ) else (
      if %%c gtr !last_full_time! (
        set last_full_time=%%c
        set last_full_name=%%a
      )
    )  
  )
)

if %last_full_time% equ 0 goto :eof
if %last_diff_time% equ 0 goto :eof
if %last_full_time% lss %last_diff_time% copy /b "%last_diff_name%" "%dst_dir%"
copy /b "%last_full_name%" "%dst_dir%"

------解决方案--------------------
7L代码作如下3处修改:
if %%c gtr !last_diff_time! (
if "%%c" gtr "!last_diff_time!" (

if %%c gtr !last_full_time! (
if "%%c" gtr "!last_full_time!" (

if %last_full_time% lss %last_diff_time% (
if "%last_full_time%" lss "%last_diff_time%" (
------解决方案--------------------
:B
echo B
goto end
 
:A