Удалить все файлы в папке, но пропустить файлы, содержащие определенную строку - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь очистить временные файлы, но хочу пропустить некоторые файлы с определенным именем. Независимо от расширения.

Пробовал следующим образом:

@echo off
setlocal EnableDelayedExpansion
for /f "eol=: delims="  %F in ('dir "%windir%/temp" /b /a-d * ') do find "TESTE" %F > nul || del "%F"
pause

Требуется, чтобы все файлы, которые имеют имя TESTE, были пропущены при удалении.

Но мой сценарий даже не запускается.

Может кто-нибудь объяснить, что не так?

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Не совсем понятно, хотите ли вы исключить из удаления файлы, имена или содержимое которых включают определенную строку; в любом случае, это для первого:

pushd "%WinDir%\TEMP" && (
    for /F "delims= eol=|" %%F in ('
        dir /B /A:-D "*.*" ^| findstr /V /I /C:"TESTE"
    ') do (
        ECHO del /F "%%F"
    )
    popd
)

Как только вы будете удовлетворены результатом, удалите команду ECHO в верхнем регистре .


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

pushd "%WinDir%\TEMP" && (
    for /F "delims= eol=|" %%F in ('
        dir /B /A:-D "*.*"
    ') do (
        set "NAME=%%~nF"
        setlocal EnableDelayedExpansion
        if /I "!NAME:TESTE=!"=="!NAME!" (
            endlocal
            ECHO del /F "%%F"
        ) else endlocal
    )
    popd
)
1 голос
/ 19 июня 2020

У вас должна быть возможность использовать findstr.exe с параметрами /V и /M для вывода списка нежелательных файлов.

@SetLocal EnableExtensions
@For /F "Delims=" %%G In (
    '%__AppDir__%findstr.exe /VPMLI "TESTE" "%SystemRoot%\TEMP\*" 2^>NUL'
)Do @Del /A/F "%%G"
@Pause

Обратите внимание, что каталог \Windows\Temp обычно защищен, поэтому вам может потребоваться запустить этот сценарий «от имени администратора».

...