要复制和重命名今天创建的SQL备份文件的批处理文件

时间:2013-07-07 08:21:10

标签: batch-file copy rename database-backups

我目前正在处理批处理文件以删除以前的文件,复制任何创建的文件“今天”并重命名为通用名称。这适用于每天从另一个实例创建的备份文件中恢复数据库文件。

@echo off

echo deleting previous file.....

del E:\DataRestore\DBRestore.bak /f

FOR /F %%I IN ('dir /B /O:D *.bak') DO SET filename=%%I

FOR %%f IN (%filename%) DO SET temp=%%~tf

set mydate=%temp:~6,4%%temp:~0,2%%temp:~3,2%

FOR /F "tokens=1-4 delims=/ " %%I IN ('DATE /t') DO SET mydate2=%%L%%J%%K 

ECHO last modified file date is %mydate%

if %mydate2%==%mydate% 

RENAME %%I DBRestore.bak

DO COPY %%I E:\DataRestore & exit /b

我收到语法错误。

1 个答案:

答案 0 :(得分:0)

if %mydate2%==%mydate%

RENAME %%I DBRestore.bak

DO COPY %%I E:\DataRestore & exit /b

以上行不是有效的批处理语法。

  1. 您不能拥有if条件,但不能采取任何措施。
  2. 您不能在循环外使用循环变量(%%I)。
  3. do只是for循环中的有效关键字。
  4. 此外,您无需通过date /t确定当前日期。提供该信息的变量%DATE%

    您的脚本应该看起来像这样:

    @echo off
    
    setlocal EnableDelayedExpansion
    
    echo deleting previous file.....
    del E:\DataRestore\DBRestore.bak /f
    
    set mydate2=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%
    
    for /F %%I in ('dir /B /O:D *.bak') do (
      set "filename=%%~fI"
    
      set "temp=%%~tI"
      set "mydate=!temp:~6,4!!temp:~0,2!!temp:~3,2!"
    
      echo last modified file date is !mydate!
    
      if "%mydate2%"=="!mydate!" (
        copy "!filename!" E:\DataRestore\DBRestore.bak
        exit /b
      )
    )