跳到主要內容

使用VisualStudio建置事件及xcopy快速分類輸出的檔案

 from https://note.kimx.info/2014/03/visualstudioxcopy.html



前言

   目前在內部建立了一組專案樣板的Nupkg,若要發佈更新時,我的步驟是先發行專專輸出到目錄,並作了以下動作:
1.複製dll到nupkg的lib目錄
2.複製其他所需內容 如:js,css等內容檔到nuget的content目錄

Ps:在作第2點時會需要先將目錄內的一些非必要檔案移除
image


這樣的動作,作一~兩次倒還好,若常作的話除了令人煩噪以外,還會常發缺檔案或多了檔案的問題..針對此問題我改使用VisualStudio的建置事件先幫我將所需要的目錄及檔案先分類好,然後再一次複製到Nupkg上,這樣的方式省事多了。

使用方式

1.打開[專案屬性]的建置事件-->建置後事件命令列 輸入xcopy語法
image

以下為我目前使用的語法if $(ConfigurationName) == Release (
xcopy $(ProjectDir)Areas\*.cshtml E:\Nuget_DLL\content\Areas /S /Y /I
xcopy $(ProjectDir)Content\Site.css E:\Nuget_DLL\content\Content\ /S /Y /I
xcopy $(ProjectDir)fonts\*.* E:\Nuget_DLL\content\fonts /S /Y /I
xcopy $(ProjectDir)Scripts\sysCore.js E:\Nuget_DLL\content\Scripts\ /S /Y /I
xcopy $(ProjectDir)Views\*.cshtml E:\Nuget_DLL\content\Views /S /Y /I
xcopy $(ProjectDir)favicon.ico E:\Nuget_DLL\content\ /S /Y /I
xcopy $(ProjectDir)Global.asax E:\Nuget_DLL\content\ /S /Y /I
xcopy $(ProjectDir)bin\NTX*.dll E:\Nuget_DLL\lib\ /S /Y /I
echo f|xcopy $(ProjectDir)Web.config E:\Nuget_DLL\content\Web.config.transform /S /Y /I
)

上方的語法較特別的是最後一行的開頭echo f,此為因我需要將檔案複製成另一檔案名稱,但
建置會出現訊息"(F = 檔案,D = 目錄)?"要你選擇,而使用echo f來強制為檔案

上述刪除線內容在測試時一直會將View/web.config拿來覆蓋,所以我乾脆直接建一個.transform檔,用copy語法來執行copy $(ProjectDir)Web.config.transform E:\MPISI\Project_Deploy\SysCore_Nuget_DLL\content\Web.config.transform

而後面/S /Y /I則為參數值
/S:複製資料夾及子資料夾以外的空的。
/Y:不要提示您確認是否要覆蓋一個已經存在的檔案
/I:如果目的不存在且複製一個以上的檔案的話,就假設指定的目的一定是目錄。

詳細語法可參考http://support.microsoft.com/kb/289483/zh-tw
參考文章http://yy-programer.blogspot.tw/2013/06/visual-studio.html
http://social.technet.microsoft.com/Forums/scriptcenter/en-US/b7baef00-e0e3-41b2-8968-87352769c386/xcopy-force-file-or-directory-by-default?forum=ITCG
http://vanishing.pixnet.net/blog/post/26372267-%E7%94%A8xcopy%E4%BE%86%E5%82%99%E4%BB%BD-part.ii-%E6%8C%87%E4%BB%A4%E5%A4%A7%E9%9B%86%E5%90%88%E5%AF%A6%E6%88%B0%E7%AF%87




from http://yy-programer.blogspot.com/2013/06/visual-studio.html

Visual Studio提供程式建置前、後的命令事件

相當的方便好用

但每次要查巨集指令時都要找

特此記錄一下

巨集出處

巨集
描述
$(ConfigurationName)
目前專案組態的名稱,例如 "Debug|Any CPU"。
$(OutDir)
相對於專案目錄的輸出檔目錄路徑。這將解析為 [輸出目錄] 屬性 (Property) 的值。尾端會加上反斜線「\」。
$(DevEnvDir)
Visual Studio 2008 的安裝目錄 (定義為磁碟機 + 路徑),尾端加上反斜線「\」。
$(PlatformName)
目前的目標平台名稱。例如 "AnyCPU"。
$(ProjectDir)
專案的目錄 (定義為磁碟機 + 路徑),尾端會加上反斜線「\」。
$(ProjectPath)
專案的絕對路徑名稱 (定義為磁碟機 + 路徑 + 主檔名 + 副檔名)。
$(ProjectName)
專案的主檔名。
$(ProjectFileName)
專案的檔名 (定義為主檔名 + 副檔名)。
$(ProjectExt)
專案檔的副檔名。在副檔名之前包括一個句號「.」。
$(SolutionDir)
方案的目錄 (定義為磁碟機 + 路徑),尾端會加上反斜線「\」。
$(SolutionPath)
方案的絕對路徑名稱 (定義為磁碟機 + 路徑 + 主檔名 + 副檔名)。
$(SolutionName)
方案的主檔名。
$(SolutionFileName)
方案的檔名 (定義為主檔名 + 副檔名)。
$(SolutionExt)
方案的副檔名。在副檔名之前包括一個句號「.」。
$(TargetDir)
建置主要輸出檔的目錄 (定義為磁碟機 + 路徑)。尾端會加上反斜線「\」。
$(TargetPath)
建置主要輸出檔的絕對路徑名稱 (定義為磁碟機 + 路徑 + 主檔名 + 副檔名)。
$(TargetName)
建置主要輸出檔的主檔名。
$(TargetFileName)
建置主要輸出檔的檔名 (定義為主檔名 + 副檔名)。
$(TargetExt)
建置主要輸出檔的副檔名。在副檔名之前包括一個句號「.」。



而常用的xcopy的指令參數出處

xcopy source destination /a | /m /d:date /p /s /e /v /w

參數
描述
source
指定要複製的檔案。
destination
指定的位置和新的檔案名稱。
/a
複製檔案有保存屬性設定。這個參數不會變更該屬性。
/m
複製檔案的保存屬性設定,並關閉 [保存] 屬性。
/d:date
指定的日期晚於或等於,就會變更複製檔案。
/p
會提示您之前建立的每個目的地檔案。
/s
複製資料夾及子資料夾以外的空的。
/e
會複製任何子資料夾,即使它是空白。
/v
確認每個新的檔案。
/w
會提示您複製之前,請按任一按鍵。









from https://vanishing.pixnet.net/blog/post/26372267-%E7%94%A8xcopy%E4%BE%86%E5%82%99%E4%BB%BD-part.ii-%E6%8C%87%E4%BB%A4%E5%A4%A7%E9%9B%86%E5%90%88%E5%AF%A6%E6%88%B0%E7%AF%87

分享: facebook PLURK twitter 
 

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\r\r
[/EXCLUDE:file1[+file2][+file3]...]

source 指定要複製的檔案。
destination 指定位置或者/以及新檔案的名稱。
/A 只複製設定成保存屬性的檔案,不要改變屬性的設定。
/M 只複製設定成保存屬性的檔案,並清除保存屬性。
/D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日期,
只複製那些來源檔案日期比目的檔案日期為新的檔案。
/EXCLUDE:file1[+file2][+file3]...
指定檔案清單字串。每個字串
應該在檔案中的不同行。如果有字串對應到要進行複製的檔案絕
對路徑的任何部分,這個檔案會被排除複製。例如,指定字串
\obj\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是
.obj 的檔案複製。
/P 在建立每個目的檔案時顯示提示。
/S 複製每個目錄及其包含的子目錄,不複製空目錄。
/E 複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E
相同,能夠用來修改 /T。
/V 驗證每個新檔案。
/W 在複製之前提示您按鍵繼續。
/C 如果錯誤發生時也繼續複製。
/I 如果目的不存在且複製一個以上的檔案的話,就假設指定的
目的一定是目錄。
/Q 在複製時不要顯示檔名。
/F 在複製時顯示來源及目的檔案的全部檔名。
/L 顯示要複製的檔案。
/G 允許加密檔案複製到不支援加密的
目的地。
/H 時複製隱藏檔和系統檔。
/R 覆蓋唯讀檔案。
/T 建立目錄結構,但不複製其中的檔案。不包括空目錄及子目錄。
/T /E 會包括空目錄及子目錄。
/U 只複製已經存在目的位置的檔案。
/K 複製檔案屬性。通常 Xcopy 會重設唯讀的屬性。
/N 用所產生的短檔名來進行複製。
/O 複製檔案所有權及 ACL 資訊。
/X 複製檔案審查設定 (包含 /O)。
/Y 不要提示您確認是否要覆蓋一個已經存在的檔案。
/-Y 示您確認是否要覆蓋一個已經存在的檔案。
/Z 在可重新開始的模式中複製網路檔案。

參數 /Y 可以在 COPYCMD 環境變數中預先設定。但可以在命令列中用 /-Y 參數
來覆蓋原有設定。

備份用 XCOPY
xcopy 來源資料夾 目的資料夾 /S /D /Y 


測試用的option
/D/K/E/Y/C/I

1 參考:
http://www.computing.net/answers/programming/xcopy-log-needed/14504.html
============================
::== timer2.bat
@echo off
set start=%TIME%
call YOUR.BAT
echo started at %START%>logfile
echo done at %TIME%>>logfile
:: DONE

============================
2 參考:
http://blog.yslifes.com/archives/326
http://blog.yslifes.com/archives/172 日期目錄來做檢查及建立

留言

熱門文章