批处理脚本:使用新的sql文件更新数据库

时间:2015-02-19 18:12:26

标签: mysql batch-file

所以我正在尝试创建一个批处理文件,我可以执行该文件以使用sql文件更新多个数据库。我已经创建了第一部分,它在所有数据库中执行sql文件。它不是很精细,但它完成了这项工作。我的问题是所有文件总是被执行。

我想要的是检查批处理脚本的执行日期/时间和每个sql脚本的最后修改日期/时间。多亏了这个,我只能执行在执行批处理脚本后修改/创建的sql脚本。我努力尝试但没有设法编写此功能的脚本。我不熟悉批处理脚本^^

谢谢!

脚本

@echo off 

set "mySQLexe=C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe"
for /f "tokens=*" %%A in (databases.txt) do ( 
  for %%G in (*.sql) do ( 
      %mySQLexe% -hlocalhost -uroot %%A < %%G 
  )
) 
REM Save execution of batch file 
@echo %date% > executiontime.txt
@echo %time% >> executiontime.txt

1 个答案:

答案 0 :(得分:0)

试试这个:

@echo off
setlocal enabledelayedexpansion
set "mySQLexe=C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe"
for /f "tokens=*" %%A in (databases.txt) do ( 
  for /f "tokens=*" %%G in ('dir /b *.sql') do ( 
    Call :FileModTime "%%G" sTime
    Call :FileModTime "%%~dpf0" bTime
    if  !sTime! GTR !bTime! (
      echo %mySQLexe% -hlocalhost -uroot %%A < %%G 
    )  
  )
) 
exit /b 

:FileModTime  File  [TimeVar]
:: Created by dbenham from dostips    ::
:: Converts current time to epox time ::
setlocal disableDelayedExpansion
for %%F in ("%~1") do set "file=%%~fF"
set "time="
for /f "skip=1 delims=,. tokens=2" %%A in (
  'wmic datafile where "name='%file:\=\\%'" get lastModified /format:csv 2^>nul'
) do set "ts=%%A"
set "ts=%ts%"
if defined ts (
  set /a "yy=10000%ts:~0,4% %% 10000, mm=100%ts:~4,2% %% 100, dd=100%ts:~6,2% %% 100"
  set /a "dd=dd-2472663+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4"
  set /a "ss=(((1%ts:~8,2%*60)+1%ts:~10,2%)*60)+1%ts:~12,2%-366100-%ts:~21,1%((1%ts:~22,3%*60)-60000)"
  set /a "ts=ss+dd*86400"
)
endlocal & if "%~2" neq "" (set "%~2=%ts%") else echo(%ts%

测试后删除回声并确保它正常工作。