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
除了最後一行(If子句)之外,我已經掌握了大部分工作。我將「setlocal enabledelayedexpansion」更改爲「setlocal enableextensions enabledelayedexpansion」,並在if後添加「endlocal」。什麼都沒有被添加到InstallScript.sql –
@ChrisL:我的建議:添加一些'echo'命令進行調試,檢查值(月/日的順序可能取決於您的本地設置),並測試「IF」子句固定值來查看它是否按原樣工作。 –
我發現這個問題,顯然日期時間/數字太長 - >數字中的YYYYMMDDHHMM對於LSS測試來說太長,所以我只將年份縮短爲兩位數。 YYMMDDHHMM和一切似乎工作。不過,我在12小時內收到AM/PM的小時(HH) –