CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Аватара пользователя
Fafus

CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение Fafus »

Господа, прошу помощи, есть каталог с подкаталогами, в которых файлы jpg с именами *.jpg и *_1.jpg. Нужен скрипт, который удалит только файлы с названием типа *.jpg . И перед удалением вывел предупреждение, в каком каталоге и сколько файлов удалится y\n, если это возможно
Аватара пользователя
Iska

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение Iska »

Fafus, вот это:


Цитата Fafus:



с именами *.jpg и *_1.jpg.
CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением




к чему было? Вы понимаете, что первая маска покрывает вторую целиком и полностью?




Цитата Fafus:



И перед удалением вывел предупреждение, в каком каталоге и сколько файлов удалится y\n, если это возможно
CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением




Возможно, но нудно. И зачем?





Код:

Код: Выделить всё

del /f /p /s /a "Путь к каталогу\*.jpg"
Аватара пользователя
Fafus

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение Fafus »

off

[spoiler]Для "тотала", такое действит. не нужно, от слова сафсем. Гислер старался-тужился и в итоге заплакал...[/spoiler]
Аватара пользователя
glukin

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение glukin »

Iska, Я так понимаю - нужно:

Если (filename(последние 4 символа в имени файла)==.jpg)&&(filename(последние 6 символов в имени файла)!=_1.jpg) То

Файл удалить



Автор, уточните, если не так.
Аватара пользователя
glukin

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение glukin »

Да, извините, ошибся в первом посте. В общем есть файлы [filename]_1.jpg и [filename].jpg

Нужно оставить только [filename]_1.jpg, остальные удалить.

Конкретный пример: IMG_0018.jpg - удалить, IMG_0018_1.jpg - оставить



По поводу сообщения перед удалением, можно ли сделать хотя бы так, чтобы перед удалением был запрос y/n или что-то вроде этого. Скрипт будет кнопкой в totalcmd, и таким образом хочу обезопаситься от случайного сноса нужных jpg'ов если находясь в другой папке (которую чистить не планирую) запущу скрипт.
Аватара пользователя
megaloman

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение megaloman »

Если удалить все файлы *.jpg кроме *_1.jpg

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "BoxIn=Z:\Temp"
Set "Mask=.jpg"
Set "MaskEx=_1.jpg"
Set "Exclude=~EXCLUDE.tmp"
Echo %MaskEx%>"%EXCLUDE%"
FOR /F "usebackq delims=" %%f IN (`XCOPY "%BoxIn%\*%Mask%" /L /S /EXCLUDE:%Exclude% 2^>nul`) DO (
	If /I "%%~xf"=="%Mask%" Del /P "%%f" 
)
Del "%EXCLUDE%"
pause
GoTo :Eof








Если удалить все файлы filename.jpg, а filename_1.jpg оставить

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "BoxIn=Z:\Temp"
Set "Mask=.jpg"
Set "MaskEx=_1.jpg"
Set "Exclude=~EXCLUDE.tmp"
Echo %MaskEx%>"%EXCLUDE%"
FOR /F "usebackq delims=" %%f IN (`XCOPY "%BoxIn%\*%Mask%" /L /S /EXCLUDE:%Exclude% 2^>nul`) DO (
	If /I "%%~xf"=="%Mask%" If Exist "%%~dpnf%MaskEx%" Del /P "%%f" 
)
Del "%EXCLUDE%"
pause
GoTo :Eof







На каждое удаление выдаётся запрос. Имя папки с файлами надо указать, у меня это Set "BoxIn=Z:\Temp"
Аватара пользователя
megaloman

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение megaloman »

Цитата Fafus:



Скрипт будет кнопкой в totalcmd, и таким образом хочу обезопаситься от случайного сноса нужных jpg'ов если находясь в другой папке (которую чистить не планирую) запущу скрипт.
CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением




Надо приучаться подобные вещи делать банально «ручками». Что в Far Manager, что в Total Commander задаёте маску поиска с исключением:



Код:

Код: Выделить всё

*.jpg|*_1.jpg

ищете, результаты выводите на панель, убеждаетесь, что найдено именно то, что нужно, и ничего лишнего, затем выделяете и удаляете.



Это будет на порядок быстрее, нежели на каждый подобный чих лепить отдельный пакетный файл или скрипт.
Аватара пользователя
Iska

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение Iska »

Fafus, Забыл спросить: конкретная пара filename.jpg и filename_1.jpg находятся в одной папке? Мои решения работают в этом предположении. Если в разных папках, то возможная реализация будет работать намного медленнее.
Аватара пользователя
megaloman

Re: CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Сообщение megaloman »

Цитата Iska:



нежели на каждый подобный чих лепить отдельный пакетный файл или скрипт.
CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением




целиком согласен



Fafus

Еще вариант:



Код:

Код: Выделить всё

@echo off
set "d=papka"
set "r=jpg"
echo Следующие файлы будут удалены:& echo:
for /f "delims=" %%a in ('2^>nul dir /a-d/b "%d%\*.%r%"^|findstr /rvc:"^[^_][^_]*_[0-9][0-9]*\.%r%$"') do set /a m+=1& echo %%a& set "$_%%a=%%a"
echo Всего файлов будет удалено: %m% штук& echo:& set /p "v=Сделайте выбор (удалять=y,не удалять=n): "& echo:
if %v%==y (echo Удаляем:& for /f "tokens=2 delims==" %%a in ('set $_') do echo del "%d%\%%a")&: Убрать echo перед del, если все устраивает
if %v%==n echo Операция отложена& echo:
pause

Сохранить в кодировке 866!
Ответить

Вернуться в «Скриптовые языки администрирования Windows»