Как удалить только текстовые файлы, кроме нескольких файлов - PullRequest
0 голосов
/ 21 мая 2019

По определенному пути у меня есть несколько разных типов файлов.Например, .txt, .bas, .cls и т. Д. Мне нужно удалить только текстовые файлы по этому пути, за исключением нескольких файлов.Например, если путь имеет a.txt, b.txt, c.txt, aa.bas, bb.cls, он должен удалить только a.txt.Он не должен удалять b.txt и c.txt (также он не должен удалять другие файлы расширения).

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Для удаления всех файлов ?.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
)
0 голосов
/ 21 мая 2019

"... он должен удалять только a.txt. Он не должен удалять b.txt и c.txt ..."

Чтобы переформулировать свою идею, вам нужно удалить только a.txt извезде.И больше ничего не трогай.Это можно сделать с помощью recursive del, используя switch / s (подкаталоги)

del /s a.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...