2014-04-08 7 views
0

Я хотел бы удалить все в папку, но некоторые файлы, скажем fileA.txt, fileB.exe и fileC.dll. Как я могу обработать?Как удалить все, кроме некоторых файлов с пакетным файлом?

Вот что я пытался, но это не цикл по всем файлам и останавливается на первом и даже не удалить его:

for /R %%I in (*.*) do (
    if "%%~nxI" == "fileA.txt" goto cd1 
    if "%%~nxI" == "fileB.exe" goto cd1 
    if "%%~nxI" == "fileC.dll" goto cd1 
    goto cd2 

    :cd1 
    goto fin 

    :cd2 
    echo HERE WE MUST DEL THE FILE ! 
    goto fin 

    :fin 
    echo Done 
) 

ответ

3

Вот один из способов:

@echo off 
call :hide +h 
del *.*? 
call :hide -h 
echo done. 
goto :EOF 

:hide 
for %%a in (
"fileA.txt" 
"fileB.exe" 
"fileC.dll" 
) do attrib %1 "%%~a" 
+0

Спасибо! не могли бы вы объяснить, что вы сделали? –

+0

Мне это нравится, но почему бы не петля, как ответ MC ND? Это действительно хороший способ скрыть, а затем скрыть файлы? –

+0

Всегда существует несколько способов решения большинства проблем. Я решил показать вам этот путь. :) – foxidrive

3

Сформировать список, удалить из него не нужных файлов, удалять остальное

for /f "delims=" %%a in (
    'dir /s /b /a-d * ^| findstr /v /i /e /c:"\\filea.txt" /c:"\\fileb.exe" /c:"\\filec.dll"' 
) do del "%%a" 

Для более длинного списка исключений, то лучше для создания текстового файла со списком исключаемых файлов, а затем используйте переключатель /gfindstr, чтобы указать строки.

1
@echo off 
setlocal EnableDelayedExpansion 

set exclude=/fileA.txt/fileB.exe/fileC.dll/ 

for /R %%I in (*.*) do (
    if "!exclude:/%%~nxI/=!" equ "%exclude%" del "%%I" 
) 
Смежные вопросы