Подтвердить что ты не робот

Как удалить все файлы и папки с помощью 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>
4b9b3361

Ответ 1

Наконец, я использовал powershell, который намного быстрее:

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

Ответ 2

задача RemoveDir удаляет указанные каталоги и все его файлы и подкаталоги. Вам не нужно сначала удалять файлы и подкаталоги. Просто передайте имя каталога в RemoveDir.

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

Ответ 3

Хотя есть способы построить это, используя только MSBuild, я настоятельно рекомендую пакет расширения MSBuild.

http://msbuildextensionpack.codeplex.com/ [был перемещен]
GitHub: MSBuildExtensionPack

Используя пакет, вы получаете задачу RemoveContent, которая делает именно то, что вам нужно. После установки вы просто сделаете что-то вроде:

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

Ответ 4

Я прихожу к этому разговору немного поздно, но я нашел самый простой способ добиться этого, чтобы использовать задачу Exec для выполнения команды партии, заданной lain в ответ на аналогичный вопрос (с небольшими изменениями по-настоящему):

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