2009-02-17 16 views
11

Szukam skryptu DOS, aby usunąć wszystkie pliki i podkatalogi w katalogu głównym, z wyjątkiem zestawu plików wsadowych (* .bat), które znajdują się w katalogu głównym. Czy są tam jacyś DOS-y, które znają łatwy sposób na zrobienie tego?Jak mogę usunąć wszystkie pliki/podkatalogi, z wyjątkiem niektórych plików w systemie DOS?

Aktualizacja

Dzięki za pomoc każdego. To jest miejsce, w którym teraz jestem (patrz poniżej). Używam sugestii Kena do usunięcia plików. Chciałbym wiedzieć, jak mogę zatrzymać ten skrypt, jeśli komendy del lub RD nie mogą zostać wykonane z powodu blokady pliku/katalogu. Ktoś wie jak? Teraz ten skrypt zrobi kilka rzeczy po usunięciu i chciałbym zatrzymać skrypt, jeśli jakiekolwiek z tych operacji się nie powiedzie.

@echo off 

REM ********************************************************************* 
REM * Delete all files and subdirs except for batch files in the root * 
REM ********************************************************************* 

REM Delete all files in current dir except bat files. Does this by a) setting the attributes of *.bat files to 
REM readonly and hidden, b) deleting the rest, c) reseting the attributes 

attrib +r +s *.bat 
del *.* /S /Q 
attrib -r -s *.bat 

REM Deletes ALL subdirectories 

FOR /D %%G in (*) DO RD /s /q %%G 
+0

Czy to oznacza: Nie usuwaj ŻADNYCH plików .bat w katalogu głównym? Lub nie usuwaj TYCH .bat IF, jeśli są one w katalogu głównym? – colithium

+0

Nie usuwaj plików _any_ .bat w katalogu głównym –

Odpowiedz

20

można ustawić atrybuty plików, które chcesz zachować tylko do odczytu i ukryte najpierw usuń resztę, a następnie zresetować atrybuty ukryte pliki z powrotem do odczytu.

attrib +r +s *.bat 
del *.* 
attrib -r -s *.bat 

Kiedyś to zrobić dość często, i napisał plik wsadowy, który zautomatyzowany to:

@echo off 
@ if "%1" == "%9" goto help 
@ if /i %1 EQU ? goto help 
@ if /i %1 EQU help goto help 
@ attrib +h +s %1 
@ %2 %3 /Q 
@ attrib -h -s %1 
@ goto :EOF 
:help 
@echo  ╔═══════════════════════════════════════════════════════╗ 
@echo  ║ except filespec1 doscommand filespec2     ║ 
@echo  ║              ║ 
@echo  ║ filespec1 The files to exclude from doscommand  ║ 
@echo  ║ doscommmand The DOS command to execute on filespec2 ║ 
@echo  ║ filespec2 The files to execute doscommand against ║ 
@echo  ║              ║ 
@echo  ║ Example:            ║ 
@echo  ║              ║ 
@echo  ║ except *.txt del *.*         ║ 
@echo  ║              ║ 
@echo  ║Deletes all files except text files in the directory ║ 
@echo  ╚═══════════════════════════════════════════════════════╝ 

to chyba OK, po prostu korzystać z ukrytą cechę, ale wiem, że del nie dotykać ukryte pliki systemowe, więc ustawiam oba. Lepiej, niż przepraszam, IMO.

podstawie komentarzu od Marcus: Jeśli chcesz przedłużyć ten obejmuje podkatalogi katalogu bieżącego, wystarczy zmienić obie linie Attrib do

attrib <remainder of line> /S 

i zmienić linię pomiędzy dwoma liniami Attrib do

@ %2 %3 /Q /S 

To powinno działać dla większości rzeczy, które chciałbyś zrobić poza .bat.

+0

To świetny pomysł. Muszę również usunąć wszystkie podkatalogi (i ich zawartość). Wydaje się, że ten skrypt usuwa tylko pliki * .bat w katalogu głównym. –

+0

Marcus, zaktualizowałem post, aby pokazać również włączenie subdirów. –

2

Poprawiono podstawie @ komentarz Kena:

>d: 
>mkdir bats 
>c: 
>copy *.bat d:\bats 
>del *.*/Y 
>copy d:\bats\*.bat c:\ 
+0

Nadal przechowuj skrypt dos-attack w swoim systemie ;-) – dirkgently

+0

Ups, nie, nie robisz. Ale co robi '/ Y'? – dirkgently

+0

Odpowiedzi Y na pytanie "jesteś pewien?" –

0

Jest to oparte na metodzie Alexa tworzenia kopii zapasowej plików .BAT, ale usuwa także wszystkie podfoldery za pomocą polecenia RD.

@echo off 

rem !WARNING! 
rem THE_DELETE_DRIVE is the drive to delete 
rem THE_BACKUP_DRIVE is the drive to use for backup 
set THE_DELETE_DRIVE=T: 
set THE_BACKUP_DRIVE=C: 
rem !WARNING! 

echo This will recursively delete everything from %THE_DELETE_DRIVE%\ (except batch files). 
echo Are you sure? Press Ctrl+C to cancel, or any other key to continue... 
echo. 
pause 

rem Make the backup folder 
md %THE_BACKUP_DRIVE%\bak12345 

rem Copy all batch files from delete-drive root to backup folder 
copy %THE_DELETE_DRIVE%\*.bat %THE_BACKUP_DRIVE%\bak12345 

rem Delete everything in the delete-drive root 
rd /s/q %THE_DELETE_DRIVE%\ 

rem Copy all backed-up files back to delete-drive root 
copy %THE_BACKUP_DRIVE%\bak12345\*.bat %THE_DELETE_DRIVE%\ 

rem Remove the backup folder 
rd /s/q %THE_BACKUP_DRIVE%\bak12345 

echo ************************************ 
echo All Done! 
echo ************************************ 
echo. 

pause 
Powiązane problemy