如何获取batch file中添加/修改的文件

我有以下batch file连接在一个.sql结尾的文件夹中的所有文件。

set func=%~dp0%Stored Procedures\*.sql for %%i in (%func%) do type "%%i" >>InstallScript.sql 

我们使用SVN作为我们的仓库,我们正在使用分支。 目前该脚本连接了所有的.sql文件,甚至没有改变。 我想改变它,所以它只连接在创build分支后修改和/或创build的文件。 我们可以通过查看每个文件夹中的.svn文件夹(有一个存储过程,视图,函数子文件夹)上的date时间。 但我不知道如何做batch file。

理想情况是这样的(伪代码):

 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 

第一步,获取.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 

确保不要在多行部分输入任何其他空格。 希望这可以帮助。