Как удалить все файлы и папки с помощью msbuild - PullRequest
26 голосов
/ 22 февраля 2011

Как я могу удалить все файлы и папки по указанному пути?

Я пробовал это, но я не могу выбрать каталоги.

<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 ]

66 голосов
/ 22 февраля 2011

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

   <ItemGroup>
        <DirsToClean Include="work" />
    </ItemGroup>
    <Target Name="CleanWork">
        <RemoveDir Directories="@(DirsToClean)" />
    </Target>
16 голосов
/ 22 февраля 2011

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

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

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

<MSBuild.ExtensionPack.FileSystem.Folder
   TaskAction="RemoveContent" Path="$(PathtoEmpty)"/>
0 голосов
/ 22 апреля 2013

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

<Exec Command="FOR /D %%p IN (&quot;$(path)*.*&quot;) DO rmdir &quot;%%p&quot; /s /q" />
0 голосов
/ 28 февраля 2011

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

<exec>
 <executable>powershell.exe</executable>
 <buildArgs><![CDATA[-command "& {if( [System.IO.Directory]::Exists($pwd) ){dir $pwd | ri -recurse
    -force}}"]]></buildArgs>
</exec>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...