Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

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

Новый участник


Сообщения: 14
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:26, 12-03-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Fafus, вот это:
Цитата Fafus:
с именами *.jpg и *_1.jpg. »
к чему было? Вы понимаете, что первая маска покрывает вторую целиком и полностью?

Цитата Fafus:
И перед удалением вывел предупреждение, в каком каталоге и сколько файлов удалится y\n, если это возможно »
Возможно, но нудно. И зачем?

Код: Выделить весь код
del /f /p /s /a "Путь к каталогу\*.jpg"

Отправлено: 10:42, 12-03-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 161
Благодарности: 5

Профиль | Отправить PM | Цитировать


Iska, Я так понимаю - нужно:
Если (filename(последние 4 символа в имени файла)==.jpg)&&(filename(последние 6 символов в имени файла)!=_1.jpg) То
Файл удалить

Автор, уточните, если не так.

Отправлено: 13:30, 12-03-2017 | #3


Новый участник


Сообщения: 14
Благодарности: 1

Профиль | Отправить PM | Цитировать


Да, извините, ошибся в первом посте. В общем есть файлы [filename]_1.jpg и [filename].jpg
Нужно оставить только [filename]_1.jpg, остальные удалить.
Конкретный пример: IMG_0018.jpg - удалить, IMG_0018_1.jpg - оставить

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

Последний раз редактировалось Fafus, 12-03-2017 в 15:50.


Отправлено: 15:44, 12-03-2017 | #4


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Если удалить все файлы *.jpg кроме *_1.jpg
Код: Выделить весь код
@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 оставить
Код: Выделить весь код
@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"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 12-03-2017 | #5


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Вот вариант: генерируется батник, в котором собраны команды Del для удаления необходимых файлов. Далее можно этот файл просмотреть, если надо, корректировать и запустить на выполнение, чтобы необходимые файлы были удалены.
Код: Выделить весь код
@Echo Off
cls

Set "BoxIn=Z:\Temp"
Set "Mask=.jpg"
Set "MaskEx=_1.jpg"

Set "Exclude=~EXCLUDE.tmp"
Set "ExcludeBat=%~dp0%~n0.~EXCLUDE%~x0"

Echo %MaskEx%>"%EXCLUDE%"
>"%ExcludeBat%" Echo @Echo Off

>>"%ExcludeBat%" (FOR /F "usebackq delims=" %%f IN (`XCOPY "%BoxIn%\*%Mask%" /L /S /EXCLUDE:%Exclude% 2^>nul`) DO (
			Set "DCount=%%f"
			If /I "%%~xf"=="%Mask%" If Exist "%%~dpnf%MaskEx%" echo Del /P "%%f" 
		)
)
Del "%EXCLUDE%"
>>"%ExcludeBat%" echo rem %DCount% 
more "%ExcludeBat%"

Echo Создан файл "%ExcludeBat%" 

pause
rem Call "%ExcludeBat%"

GoTo :Eof
Вместо more можно прописать редактор, поддерживающий 866 кодировку (при наличии русских букв в полных путях файлов, если их нет - можно применить, например, notepad) и после этого прописать сформированный батник на выполнение

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:10, 12-03-2017 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Fafus:
Скрипт будет кнопкой в totalcmd, и таким образом хочу обезопаситься от случайного сноса нужных jpg'ов если находясь в другой папке (которую чистить не планирую) запущу скрипт. »
Надо приучаться подобные вещи делать банально «ручками». Что в Far Manager, что в Total Commander задаёте маску поиска с исключением:
Код: Выделить весь код
*.jpg|*_1.jpg
ищете, результаты выводите на панель, убеждаетесь, что найдено именно то, что нужно, и ничего лишнего, затем выделяете и удаляете.

Это будет на порядок быстрее, нежели на каждый подобный чих лепить отдельный пакетный файл или скрипт.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:05, 12-03-2017 | #7


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:05, 12-03-2017 | #8


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата Iska:
нежели на каждый подобный чих лепить отдельный пакетный файл или скрипт. »
целиком согласен


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!
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:31, 13-03-2017 | #9


Новый участник


Сообщения: 14
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем спасибо, скрипты забрал

Отправлено: 07:24, 13-03-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление определенных подпапок и файлов в каталоге Stalker_AleX333 Скриптовые языки администрирования Windows 11 28-02-2017 23:51
PowerShell - удаление папок за исключением определнных chek Скриптовые языки администрирования Windows 3 26-05-2016 10:10
CMD/BAT - [решено] Список файлов в каталоге и подкаталогах foma24 Скриптовые языки администрирования Windows 8 22-12-2013 19:58
CMD/BAT - [решено] Удаление файлов по маске в подкаталогах с одинаковыми именами. Xarien Скриптовые языки администрирования Windows 2 24-06-2013 14:52
CMD/BAT - [решено] Удаление одинаковых файлов в подкаталогах njg Скриптовые языки администрирования Windows 1 18-11-2011 04:29




 
Переход