1

現在、以前のファイルを削除し、「今日」に作成されたファイルをコピーして、名前を一般的な名前に変更するバッチ ファイルに取り組んでいます。これは、別のインスタンスから今日作成されたバックアップ ファイルから DB ファイルを日単位で復元するためのものです。

@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. doforループでのみ有効なキーワードです。

また、 を介して現在の日付を特定する必要はありません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 に答える