@ECHO off :: ****************************************************************** :: * Install.cmd - batch file installer for T-SQL scripts :: * (C) 2013-2018 Richard Swinbank :: * http://richardswinbank.net/dos/installer :: ****************************************************************** SETLOCAL EnableDelayedExpansion :: ******** check input variables and get others ******************** IF x%1==x GOTO usageerror IF x%2==x GOTO usageerror CALL config.cmd %1 %3 IF !ERRORLEVEL! NEQ 0 GOTO error :: ******** check the script folder exists and is a directory ******* SET ScriptFolder=%2 IF NOT EXIST "%ScriptFolder%" GOTO foldererror PUSHD "%ScriptFolder%" IF !ERRORLEVEL! NEQ 0 GOTO foldererror :: ******** check we can write to the log *************************** ECHO %DATE% %TIME% Starting deployment from %ScriptFolder% to %DbServer% > %LogFile% IF !ERRORLEVEL! NEQ 0 ( ECHO Error writing to "%Logfile%" GOTO error ) :: ******** get user confirmation to continue *********************** ECHO Ready to deploy scripts ECHO. ECHO FROM folder: %ScriptFolder% ECHO. ECHO TO server: %DbServer% ECHO. ECHO USING : %SqlCmd% ECHO. SET StartDeployment=No IF %PROMPT%==NO ( SET StartDeployment=Y ) ELSE ( SET /P startDeployment=Enter Y ^& [Enter] to start deployment, [Enter] to abort: ) IF NOT x%startDeployment%==xY GOTO abort :: ******** deploy each script ************************************** :: "for %%f in (*.sql)..." should have the same effect, but name :: order is pretty critical here so we want it guaranteed! FOR /f "tokens=*" %%f IN ('DIR /b /on *.sql') DO ( ECHO. ECHO !DATE! !TIME! Deploying "%%f" ECHO !DATE! !TIME! Deploying "%%f" >> "%Logfile%" "%SqlCmd%" -I -E -S "%DbServer%" -i "%%f" -e -b >> "%Logfile%" 2>&1 IF !ERRORLEVEL! NEQ 0 ( ECHO Error deploying script "%%f" - batch aborted GOTO deployerror ) ECHO ************************************************************** >> %Logfile% ) :: ******** exit routes *********************** SET exitMsg=Deployment completed at !DATE! !TIME! - see "%LogFile%" for details SET exitCode=0 GOTO end :abort SET exitMsg=Deployment aborted at !DATE! !TIME! SET exitCode=0 GOTO end :usageerror SET exitMsg=Usage %0 { targetAlias } { scriptFolder } GOTO error :foldererror SET exitMsg=Deployment script folder "%ScriptFolder%" not found GOTO error :deployerror SET exitMsg=Deployment failed at !DATE! !TIME! - see "%LogFile%" for details GOTO error :error SET exitCode=1 GOTO end :end POPD ECHO. IF NOT "%exitMsg%" == "" ECHO %exitMsg% IF %PROMPT%==YES PAUSE EXIT /b %exitCode%