次のバッチファイルがあります。このバッチファイルは、.sqlで終わるフォルダー内のすべてのファイルを連結したものです。
set func=%~dp0%Stored Procedures\*.sql
for %%i in (%func%) do type "%%i" >>InstallScript.sql
リポジトリとしてSVNを使用し、分岐を使用しています。現在、スクリプトは、変更されていないファイルも含め、すべての.sqlファイルを連結します。ブランチの作成後に変更または作成されたファイルのみを連結するように変更したいと思います。これを行うには、各フォルダーの.svnフォルダーの日時を確認します(ストアドプロシージャ、ビュー、関数のサブフォルダーがあります)。しかし、バッチファイルでそれを行う方法がわかりません。
理想的にはこのようなもの(擬似コード):
set func=%~dp0%Stored Procedures\*.sql
set branchDateTime=GetDateTime(%~dp0%.svn) <- Gets the datetime when the .svn folder was created
for %%i in (%func%)
{
if(%%i.LastModifiedOrCreated > branchDateTime)
do type "%%i" >> InstallScript.sql
}
Doc Brownのおかげで、私はこれを手に入れることになりました(似たようなものが必要な人のために):
@echo off
cls
echo --Install Script Generated For MMH Database %DATE% %TIME% > InstallScript.sql
set branch=%~dp0.svn
for %%i in (%branch%) do set SvnFileDate=%%~ti
set year=%SvnFileDate:~8,2%
set month=%SvnFileDate:~0,2%
set day=%SvnFileDate:~3,2%
set hours=%SvnFileDate:~11,2%
set minutes=%SvnFileDate:~14,2%
set datetime=%year%%month%%day%%hours%%minutes%
:: Folder for Functions
set func=%~dp0%Functions\*.sql
setlocal enableextensions enabledelayedexpansion
@for %%i in (%func%) do set FuncFileDate=%%~ti& ^
set year2=!FuncFileDate:~8,2!& ^
set month2=!FuncFileDate:~0,2!& ^
set day2=!FuncFileDate:~3,2!& ^
set hours2=!FuncFileDate:~11,2!& ^
set minutes2=!FuncFileDate:~14,2!& ^
set datetime2=!year2!!month2!!day2!!hours2!!minutes2!& ^
if "!datetime!" LSS "!datetime2!" type "%%i" >> InstallScript.sql
:: I would add similiar code for each folder, one for Views, Stored Procs, etc...
endlocal
pause