Для удаления всех файлов ?.txt
в корневой папке, кроме b.txt
и c.txt
@echo off
for %%i in (?.txt) do (
if not "%%~nxi"=="c.txt" if not "%%~nxi"=="b.txt" echo del "%%i"
)
Для этого в корне и подкаталогах:
@echo off
for /R %%i in (?.txt) do (
if not "%%~nxi"=="c.txt" if not "%%~nxi"=="b.txt" echo del "%%i"
)
Если файлы должны быть всеми *.txt
файлами, а не просто одной цифрой в соответствии с вашим примером (добавьте /R
к рекурсиву:
@echo off
for %%i in (*.txt) do (
if not "%%~nxi"=="c.txt" if not "%%~nxi"=="b.txt" echo del "%%i"
)
Аналогично, но использование findstr только для исключения:
@echo off
for /f %%i in ('dir /b /a-d ^|findstr /vi "b.txt" ^|findstr /vi "c.txt"') do (
echo del "%%i"
)
и к поиску относятся только:
@echo off
for /f %%i in ('dir /b /a-d ^|findstr /i "a.txt"') do (
echo del "%%i"
)
и включать и искать подкаталоги:
@echo off
for /f %%i in ('dir /b /s /a-d ^|findstr /i "a.txt"') do (
echo del "%%i"
)
Во всех приведенных выше примерах удалить echo
, чтобы фактически выполнить удаление, echo
используется в качестве меры безопасности и будет отображать только результат del
на консоли.
Редактировать
Видя, что у вас есть список исключаемых файлов (согласно одному из ваших комментариев), вы можете использовать что-то вроде этого. Вы должны создать файл с именем exclusion.txt
и добавить файлы для исключения в виде списка:
b.txt
c.txt
file with space.txt
d.txt
Затем создайте командный файл и добавьте код ниже. При запуске он запросит расширение файла для фильтрации, где вы можете ввести расширение. т.е. txt
или просто нажмите , введите , чтобы выполнить удаление всех файлов, кроме исключенных. Просто чтобы быть в безопасности, я добавил дополнительный цикл for
, чтобы просто выводить файлы и запрашивать, если вы уверены, что хотите удалить файлы.
@echo off
set cnt=0 & set excl= & set ext=
echo(
if not exist exclusion.txt echo You have not created an "exclusion.txt" file. & echo( & echo You need to create it first, then rerun the script & echo( & pause & goto :eof
echo Ensure you have listed all files to be excluded in "exclusion.txt" file
echo(
set /p "ext=Add File extention to search on (txt, pdf, etc), or press enter for all files: "
if not defined ext goto cont
if not "%ext:~0,1%"=="." set "ext=.%ext%"
set "ext=*%ext%"
:cont
setlocal enabledelayedexpansion
for /f "delims=" %%a in (exclusion.txt) do (
set /a cnt+=1
set "nlr!cnt!=%%a"
)
for /l %%i in (1,1,%cnt%) do (
if not defined excl (
set "excl=!nlr%%i!"
) else (
set "excl=!excl! !nlr%%i!"
)
)
echo(
echo WARNING: You are about to delete the following files!!
echo(
for /f "delims=" %%i in ('dir /b /a-d %ext% ^|findstr /VIE "%excl%"') do (
if /i not "%%i"=="exclusion.txt" if not "%%i"=="%~0" echo %%i
)
echo(
Choice /c YN /m "Are you sure you want to delete these files?"
if %errorlevel% equ 2 goto :eof
for /f "delims=" %%i in ('dir /b /a-d %ext% ^|findstr /VIE "%excl%"') do (
if /i not "%%i"=="exclusion.txt" if not "%%i"=="%~0" del %%i
)