Как удалить все файлы и папки с помощью 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>
Ответы
Ответ 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 ("$(path)*.*") DO rmdir "%%p" /s /q" />