Here are few other similar answers that I've found, but none answers my question:
Copying entire project structure into another directory using afterbuild task
Copy all files and folders using msbuild
What I'm trying to do:
I need to copy a directory tree into several different places in the project upon compilation. Here is how it presently being done:
  <ItemGroup>
    <MediaFiles Include="$(ProjectDir)media\**\*.*" />
    <DeployLabel Include="$(ProjectDir)deploy\x">
      <Dir>x</Dir>
    </DeployLabel>
    <DeployLabel Include="$(ProjectDir)deploy\y">
      <Dir>y</Dir>
    </DeployLabel>
    <DeployLabel Include="$(ProjectDir)deploy\z">
      <Dir>z</Dir>
    </DeployLabel>
  </ItemGroup>
  <Target Name="GenericDeploy"
          Inputs="@(DeployLabel)"
          Outputs="%(Identity).Dummy">
    <Message Text="Deploying: @(DeployLabel)" />
    <Copy SourceFiles="@(MediaFiles)"
          DestinationFiles="@(MediaFiles->'$(ProjectDir)deploy%(Dir)media\%(RecursiveDir)%(Filename)%(Extension)')"/>
This pretends to run, but copies nothing at all. I've tried also to use %(DeployLabel.Dir), but that gives me an error.
I don't want to use xcopy because this program doesn't seem to be in the default inventory of Windows installs (my PC doesn't have it). Also, I must confess, I don't entirely understand what does the % thingy do. When I saw @ and % at first, I thought they were copied from Make, but now I' starting to doubt... Also some insight into what -> means would help (it's extremely difficult to find the documentation on these cryptic names).
 
    