2013-07-07 36 views
1

我目前正在一個批處理文件刪除以前的文件,複製任何文件創建「今天」並重命名爲通用名稱。這用於從今天從另一個實例創建的備份文件每天恢復一個數據庫文件。批量文件複製和重命名SQL備份文件今天創建

@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 

我得到一個語法錯誤。

回答

0
if %mydate2%==%mydate% 

RENAME %%I DBRestore.bak 

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

以上各行不是有效的批處理語法。

  1. 您不能有一個if條件,但沒有任何操作。
  2. 您不能在循環外部使用循環變量(%%I)。
  3. do只是for循環中的有效關鍵字。

此外,您不需要通過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 
) 
) 
+0

謝謝..解決方案的工作... – user2557703