如何使用msbuild删除所有文件和文件夹

时间:2011-02-22 16:24:38

标签: msbuild

如何删除指定路径中的所有文件和文件夹?

我试过了,但我无法选择目录。

<Target Name="CleanSource" Condition="$(path)!=''">

    <Message Text="path=$(path)"/>

    <ItemGroup>
      <fileToDelete Include="$(path)\**\*.*" />
      <directoryToDelete Include="$(path)\**\" /><!these doest not select any directory at all-->     
    </ItemGroup>

    <Message Text="file to delete:@(fileToDelete)"/>
    <Message Text="directory to delete:@(directoryToDelete)"/>

    <Delete Files="@(fileToDelete)" />
    <Message Text="file effectively deleted:@(DeletedFiles)"/>
    <RemoveDir Directories="@(directoryToDelete)" />
    <Message Text="Directory effectively deleted:@(RemovedDirectories)"/>

</Target>

4 个答案:

答案 0 :(得分:65)

RemoveDir task删除指定的目录及其所有文件和子目录。您不必先删除文件和子目录。只需将目录名称传递给RemoveDir。

   <ItemGroup>
        <DirsToClean Include="work" />
    </ItemGroup>
    <Target Name="CleanWork">
        <RemoveDir Directories="@(DirsToClean)" />
    </Target>

答案 1 :(得分:16)

虽然有方法只使用MSBuild来构建它,但我强烈推荐使用MSBuild扩展包。

http://msbuildextensionpack.codeplex.com/ [已被移动]
GitHub: MSBuildExtensionPack

使用该包,您将获得一个RemoveContent任务,该任务可以完全满足您的需求。安装完成后,您只需执行以下操作:

<MSBuild.ExtensionPack.FileSystem.Folder
   TaskAction="RemoveContent" Path="$(PathtoEmpty)"/>

答案 2 :(得分:-1)

我迟到了这个对话,但我发现最简单的方法是使用Exec任务执行lain给出的批处理命令以响应a similar question(你真正的小编辑:

<Exec Command="FOR /D %%p IN (&quot;$(path)*.*&quot;) DO rmdir &quot;%%p&quot; /s /q" />

答案 3 :(得分:-18)

最后我确实使用了powershell,它的速度要快得多:

<exec>
 <executable>powershell.exe</executable>
 <buildArgs><![CDATA[-command "& {if( [System.IO.Directory]::Exists($pwd) ){dir $pwd | ri -recurse
    -force}}"]]></buildArgs>
</exec>