我有以下批处理文件,它连接文件夹中.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
答案 0 :(得分: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
确保不要在多线部分输入任何额外的空格。希望这会有所帮助。