1

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

@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

我收到语法错误。

4

1 回答 1

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
  )
)
于 2013-07-07T09:25:56.407 回答