I'm trying to build an ItemGroup in an MSBuild script which contains a list of folders directly below a given 'Root' folder. So - in this example...
+ Root folder ---- Sub Folder 1 -------- Sub-Sub Folder 1 -------- Sub-Sub Folder 2 ---- Sub Folder 2 ---- Sub Folder 3
... I would want my ItemGroup to contain "Sub Folder 1", "Sub Folder 2" and "Sub Folder 3".
There may be a number of files at any point in the hierarchy, but I'm only interested in the folders.
Can anyone help!?
In MSBuild 4.0 this is possible:
<ItemGroup> <Folders Include="$([System.IO.Directory]::GetDirectories("$(RootFolder)"))" /> </ItemGroup>
Property Functions: http://msdn.microsoft.com/en-us/library/dd633440.aspx
<PropertyGroup> <RootFolder>tmp</RootFolder> </PropertyGroup> <ItemGroup> <AllFiles Include="$(RootFolder)\**\*"/> <OnlyDirs Include="@(AllFiles->'%(Directory)')"/> </ItemGroup>
@(OnlyDirs) might contain duplicates, so you could either use the RemoveDuplicatesTask :
<Target Name="foo"> <RemoveDuplicates Inputs="@(OnlyDirs)"> <Output TaskParameter="Filtered" ItemName="UniqueDirs"/> </RemoveDuplicates> </Target>
or use CreateItem with batching for %(AllFiles.Identity) or with msbuild 3.5:
<Target Name="foo"> <ItemGroup> <UniqueDirs Include="%(AllFiles.Directory)"/> </ItemGroup> </Target>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With