如何获取已在批处理文件中添加/修改的文件

时间:2012-09-27 19:27:41

标签: windows shell command-line

我有以下批处理文件,它连接文件夹中.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

1 个答案:

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

确保不要在多线部分输入任何额外的空格。希望这会有所帮助。