1

次のバッチファイルがあります。このバッチファイルは、.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
4

1 に答える 1

1

最初のステップである.svnフォルダーの日時を取得するには、次のように機能します。

for %%i in (.svn) do set FileDate=%%~ti

その行の結果を同等の日時形式に並べ替える必要がある場合があります。

for %%i in (.svn) do set FileDate=%%~ti
set year=%FileDate:~6,4%
set month=%FileDate:~3,2%
set day=%FileDate:~0,2%
set hours=%FileDate:~11,2%
set minutes=%FileDate:~14,2%
set datetime=%year%%month%%day%%hours%%minutes%
echo %datetime%

2番目の部分はもう少し洗練されており、複数のコマンド、遅延拡張、および比較が必要です。

setlocal enabledelayedexpansion

@for %%i in (*.sql) do set FileDate=%%~ti& ^
set year2=!FileDate:~6,4!& ^
set month2=!FileDate:~3,2!& ^
set day2=!FileDate:~0,2!& ^
set hours2=!FileDate:~11,2!& ^
set minutes2=!FileDate:~14,2!& ^
set datetime2=!year2!!month2!!day2!!hours2!!minutes2!& ^
if "!datetime!" LSS "!datetime2!" type "%%i" >> InstallScript.sql

複数行の部分に追加の空白を入力しないように注意してください。お役に立てれば。

于 2012-09-28T15:49:45.533 に答える