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
}

感谢布朗博士,我最终得到了这个(对于任何需要类似东西的人):

@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%

第二部分稍微复杂一点,你需要多行命令、延迟扩展和比较:

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 回答