2008-12-05 2 views
0

Я пишу сценарий развертывания, используя MSBuild. Я хочу, чтобы очистить свои веб-каталоги перед копированием всех новые файлов в Моей текущей «Clean» цель выглядит следующим образом:.Как удалить содержимое папки из командной строки в Windows?

<Target Name="Clean"> 
    <Exec Command="del %(DeploymentSet.LocalWebRoot)\* /Q /F /S" IgnoreExitCode="true" /> 
    </Target> 

Это занимает значительное количество времени, так как каждый файл будет удален из каждой вложенной папки в отдельности.

Есть ли хороший способ удалить все из заданной папки без удаления этой папки? Я хочу сохранить свои разрешения и информацию о настройке vdir.

+0

Я бы сказал дель *, но вы уже делаете это. .. – Powerlord

ответ

1

Вы можете rmdir /s /q каждый подкаталог по отдельности, затем del %(DeploymentSet.LocalWebRoot)\* /Q /F вашей чистой цели. Например:

<Target Name="Clean"> 
    <Exec Command="rmdir %(DeploymentSet.LocalWebRoot)\subdir1 /Q /S" IgnoreExitCode="true" /> 
    <Exec Command="rmdir %(DeploymentSet.LocalWebRoot)\subdir2 /Q /S" IgnoreExitCode="true" /> 
    ... 
    <Exec Command="rmdir %(DeploymentSet.LocalWebRoot)\subdirN /Q /S" IgnoreExitCode="true" /> 
    <Exec Command="del %(DeploymentSet.LocalWebRoot)\* /Q /F" IgnoreExitCode="true" /> 
    </Target> 
+0

Попытка сохранить его универсальным, чтобы чистая работа могла работать для любого данного DeploymentSet.LocalWebRoot ... придется подумать об этом. – NotMyself

+0

Да, там есть компромисс, и rmdir может быть не намного быстрее, чтобы гарантировать торговлю. –

0

Если вы не хотите, чтобы указать имена каждого подкаталоге, используйте:

<Target Name="Clean"> 
    <Exec Command="del /F /Q %(DeploymentSet.LocalWebRoot)\*.*" /> 
    <Exec Command="for /d /r &quot;%(DeploymentSet.LocalWebRoot)&quot; %v IN (*) DO rd /S /Q &quot;%v&quot;" /> 
</Target>