2017-07-20 4 views
1

J'ai un dossier avec plusieurs sous-dossiers. La structure est similaire:Script batch pour supprimer tous les dossiers sauf "Démarre avec"

  • C: \ foo
  • C: \ foo \ web.foo
  • C: \ foo \ web.bar
  • C: \ foo \ win.foo
  • C: \ foo \ win.bar
  • C: \ foo \ mobile.foo
  • C: \ foo \ mobile.bar

I w parfois ish de supprimer les dossiers avec les fichiers contenant le script suivant avec des lots:

rmdir C:\foo /s /q 

Ici, il importait peu que tout le dossier C: \ foo a été supprimé complètement.

Mais maintenant je veux seulement supprimer seulement les sous-dossiers de C: \ foo avec ses fichiers contenant, qui ne commencent pas avec "web"..

Avez-vous une bonne solution pour cela?

Merci d'avance!

Répondre

0

Ce qui suit devrait faire l'affaire, notez qu'il est un fichier de commandes en utilisant le répertoire courant:

@echo off 
for /F "delims=" %%D in ('dir /B /AD ^| findstr /V "^web."') do (
    echo rmdir %%D /s /q 
) 

Si ce Supprimons bien la echo devant rmdir.

La commande dir répertorie uniquement les noms de répertoire en raison de /AD et utilise une sortie de nom simple en raison de /B. Pour rechercher au début, utilisez findstr avec /V. Pour la négation, utilisez ^. En outre, le symbole de tuyau doit être échappé ^|.


Si vous voulez un script batch dynamique qui utilise les arguments que vous pouvez utiliser ce qui suit, appelez via batchname.bat "C:\foo" web. (si elle Supprimons bien la echo devant rmdir.):

@echo off 

set INVARGS=0 
if [%1] == [] set "INVARGS=1" 
if [%2] == [] set "INVARGS=1" 
if %INVARGS% == 1 (
    echo echo %0 ^<directory^> ^<directory_prefix^> 
    goto eof 
) 

set "folder=%1%" 
set "prefix=%2%" 

pushd "%folder%" 
echo List of folders that should be deleted: 
for /F "delims=" %%D in ('dir /B /AD ^| findstr /v "^%prefix%"') do (
    echo "%cd%\%%D" 
) 
popd 

:choice 
echo. 
set /P "c=Are you sure you want to continue [Y/N]?" 
if /I "%c%" EQU "Y" goto yes 
if /I "%c%" EQU "N" goto eof 
goto :choice 

:yes 
echo. 
pushd "%folder%" 
for /F "delims=" %%D in ('dir /B /AD ^| findstr /v "^%prefix%"') do (
    echo rmdir %%D /s /q 
) 
popd 

:eof 
+0

Merci beaucoup, cela a fait l'affaire! – swimagers

0

Cette volonté supprimer tous les fichiers commencent par web.

@echo off 
setlocal EnableDelayedExpansion 

for /f %%F in ('dir /b /s') do (
    set "name=%%~nF" 
    if /i not "!name:~0,4!" == "web." (
     rm !name! 
    ) 
)