2010-01-22 95 views
10

在我的msbuild腳本中,我在zip文件名中創建了年/月/日的zip文件,但是月份和日期總是寫入不帶前導零。日期格式?

有沒有辦法將前導零添加到我的zip文件名?

<Time> 
    <Output TaskParameter="Year" PropertyName="Year" /> 
    <Output TaskParameter="Month" PropertyName="Month" /> 
    <Output TaskParameter="Day" PropertyName="Day" /> 
</Time> 

<PropertyGroup> 
    <ZipOutDir>C:\output</ZipOutDir> 
    <ZipFileName>Application_$(Year)$(Month)$(Day).zip</ZipFileName> 
</PropertyGroup> 

,其結果是: 'Application_2010122.zip'(與一月份沒有前導零,因爲你可以看到)

回答

4

你可以使用MSBuild擴展包一拉:

http://www.msbuildextensionpack.com/help/3.5.3.0/html/9c5401ed-6f55-089e-3918-2476c186ca66.htm

或者使用格式參數去從社會任務的時間任務[你似乎使用]

MSBuild MSBuildCommunityTasks Task Time

+0

謝謝你...我已經找到了後面的鏈接並使用它。 – Goran 2010-01-22 11:56:39

+0

好東西。順便提一下這個問題,你總是提一下你正在使用/打開使用哪個任務庫的好主意。 – 2010-01-22 12:01:12

+0

如果這個被接受的答案實際上已經回答了添加到它的問題,這將是一件好事。也就是說,如何使用來自社區任務的時間任務中的格式參數來格式化日期,以便在月份中領先0。 – ssmith 2011-02-01 19:06:41

0

這是因爲MSBuild僅使用字符串操作。您必須修改現有任務,以便所有屬性將返回string s而不是int s(或返回的任何整數值),或創建一個單獨的任務,根據您的需要設置年,月和日的格式。

+0

考慮到任務庫的數量,只是想指出你的評論意味着寫一個任務,而不是找到一個已經完成的任務 - 我相信你沒有打算這麼做。 (並且我會使用PowerShell任務來做這樣的小格式化工作,如果我在其中的一個常用庫沒有任務的話) – 2010-01-22 12:00:13

+0

@Ruben:好的!我只是找不到MSBuild的任何字符串格式化任務。否則,我肯定會建議使用其中的一種。 – 2010-01-22 12:03:45

+0

有趣的是,實際上並不存在一個......我有興趣知道大多數人是否使用PowerShell任務,如果被迫這樣的事情? (我能想到的最好例子是vdproj文件需要帶有大寫字母的GUID,並且我使用PS來做ToUpper,因爲我找不到任務來完成它(或生成captialized Guid)) – 2010-01-22 12:15:11

25

In msbuild 4 you can now

$([Namespace.Type]::Method(..parameters…)) 
$([Namespace.Type]::Property) 
$([Namespace.Type]::set_Property(value)) 

所以我用

$([System.DateTime]::Now.ToString(`yyyy.MMdd`)) 

周圍格式的蜱反引號不是'

-1

這裏添加前導零

廉價和骯髒的方式
$([System.UInt16]::Parse($(Month)).ToString('00'))