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

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

Ответить
Настройки темы
CMD/BAT - [решено] Поиск и удаление файлов по маске на всех локальных дисках

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


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

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


Доброе время суток, уважаемые камрады!
Помогите, пожалуйста, решить следующую задачу:
Нужно написать скрипт, который выполняет следующее:
- поиск файлов по расширению (чтобы список расширений можно было дополнить в скрипте)
- поиск на всех локальных дисках, но не сетевых
- удаление найденных файлов
Более ничего не нужно - ни логирования, ни подсчета и т.д.

Прошу также уделить внимание тому, что должно быть строгое соответствие расширению. Например, я находил скрипты, где в списке перечислены "*.log", а при этом скрипт находил еще и файлы с расширением .log2 или .logged.

Почему создал новую тему: прокурил не только этот форум, но еще и соседние. Находил куски кодов что тут, что там, но в силу того, что склад ума не кодерский, не смог их соединить... Сижу уже пару дней в темноте и тишине, и безуспешно :-(

Отправлено: 17:09, 03-12-2016

 

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


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

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


Скажите, как изменить вышеуказанный скрипт, чтобы он искал не на всех логических дисках, а только на указанных, например - C:, D:
Я так понимаю, что нужно заменить сроку - ( wmic LogicalDisk where "DriveType=3" get Name), не могу понять на что. Спасибо.

Скрытый текст
Код: Выделить весь код
@echo off
setlocal

set "ext=.txt/.log/.dat"

for /f "skip=1" %%i in ('wmic LogicalDisk where "DriveType=3 or DriveType=2" get Name') do (
    for %%j in (%%i) do (
        for /f "delims=" %%k in ('2^>nul dir %%j\ /a-d /b /s^| findstr /e /i /l /c:"%ext:/=" /c:"%"') do (
            >>del2.log echo del /a /f "%%k"
        )
    )
)

endlocal
exit /b

Отправлено: 17:40, 12-04-2019 | #11



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

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


Ветеран


Contributor


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

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


Artym1,
Код: Выделить весь код
.........
rem	for /f "skip=1" %%i in ('wmic LogicalDisk where "DriveType=3 or DriveType=2" get Name') do (
	FOR %%i IN (C: D:) DO (
..........
..........

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


Отправлено: 18:50, 13-04-2019 | #12


Ветеран


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

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


если есть четкое условие, то не проще так (и явно быстрее как для cmd)
Код: Выделить весь код
for /f "delims=" %%a in ('dir /a-d/b/s "C:\*.txt" "C:\*.log" "C:\*.dat" "D:\*.txt" "D:\*.log" "D:\*.dat"') do echo del "%%a"
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:36, 13-04-2019 | #13


Ветеран


Contributor


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

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


alpap, Быстрее всего и проще
Код: Выделить весь код
	FOR %%i IN (C: D:) DO For %%j IN ("log" "txt" "kuku") Do Echo Del /S "%%i\*.%%~j"
Ни этот вариант, ни Ваш ИМХО низзья!
Цитата n1gt:
Например, я находил скрипты, где в списке перечислены "*.log", а при этом скрипт находил еще и файлы с расширением .log2 или .logged. »
Пример: dir *.xls выдаёт
Код: Выделить весь код
 Том в устройстве Z имеет метку Arhiv
 Серийный номер тома: F497-24CE

 Содержимое папки Z:\Box_In

14.04.2019  07:54                 2 У попа была собака.xlsm
14.04.2019  07:54                 2 У попа была собака.xlsx
14.04.2019  07:54                 2 У попа была собака.xls
               3 файлов              6 байт
               0 папок  30*455*373*824 байт свободно
А del *.xls соответственно убивает все эти файлы.
Как вариант решения, можно добавить костыль в виде If для жесткой проверки расширения
Код: Выделить весь код
@Echo Off
cls
	FOR %%i IN (C: D:) DO For %%j IN ("xls" "log" "txt" "kuku") Do (
		For /f "delims=" %%k in ('2^>nul Dir /A:-D /B /S "%%i\*.%%~j"') Do If /I ".%%~j"=="%%~xk" Echo Del "%%k"
	)
Pause
Exit /B

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


Последний раз редактировалось megaloman, 14-04-2019 в 09:49.

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

Отправлено: 08:25, 14-04-2019 | #14


Ветеран


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

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


Цитата megaloman:
Цитата n1gt:
...
»
именно
а мы уже разбираем условие Artym1 и не факт что ему нужны такие же ограничения как у ТС.
Собственно поэтому и положено и рекомендуется создавать новую тему, а раздувать старую.

Отправлено: 18:33, 14-04-2019 | #15


Ветеран


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

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


Цитата n1gt:
Прошу также уделить внимание тому, что должно быть строгое соответствие расширению. Например, я находил скрипты, где в списке перечислены "*.log", а при этом скрипт находил еще и файлы с расширением .log2 или .logged. »
Справедливости ради, это и было — строгое соответствие расширению. Абсолютно строгое:



8.3 filename - Wikipedia.

Это ещё что — как удаляются некоторые файлы, начинающиеся с кириллицы в имени, по какой-нибудь вполне невинной на первый взгляд маске «a*.doc». Ради интереса, можно выполнить команду, скажем:
Код: Выделить весь код
dir /r "%UserProfile%\*~*.*"
и подивиться результатам.

P.S. Автору темы, конечно, уже давно всё равно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:47, 14-04-2019 | #16


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


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

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


Извините, что раскопал динозавра.
А можете помочь с таким же скриптом, но уже для удаления не файлов, а папок?
То есть, чтобы можно было указать имена папок и поиск/удаление было по всем локальным дискам.

Отправлено: 07:18, 18-03-2021 | #17


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	Set DelBox="Удали папку 1" "Удали папку 2" "Удали папку 3"
	FOR /F "usebackq delims= " %%i IN (`"wmic logicaldisk where "drivetype^='3'" get caption | findstr.exe /C:":""`) DO (
		If /I Not %%i==C: (
			Echo "%%i"
			Pushd %%i\ &&(
				For %%d In (%DelBox%) Do 2>nul Rd /S /Q %%d
				For /f "usebackq delims=" %%d In (`2^>nul Dir %DelBox% /B /S /A:D`) Do 2>nul Rd /S /Q "%%d"
				Popd
			)
		)
	)
pause
Exit /B
Вводится список имен удаляемых папок (>=1 штук)
Я поставил в красной строке и в красной закрывающей скобке имя диска - исключения для просмотра диска C:
Эти красные строки можно удалить, но просмотр C: диска займёт очень большое время - решайте сами, оно Вам нужно?
Если таких исключений несколько, то можно в красной строке написать несколько If, например:
If /I Not %%i==C: If /I Not %%i==E: (

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

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

Отправлено: 11:08, 18-03-2021 | #18


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


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

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


megaloman, спасибо огромное. А можно сделать папки исключения, допустим сканировать диск C:, но не сканировать C:\Windows ?

Отправлено: 06:34, 19-03-2021 | #19


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	Set DelBox="Удали папку 1" "Удали папку 2" "Удали папку 3"
	Set ExcRoot="C:\Program Files" "C:\Users" "C:\Windows" 
	Set ExcDisk=""

rem	Set ExcDisk="C:" "D:" "Z:"

	FOR /F "usebackq delims= " %%i IN (`"wmic logicaldisk where "drivetype^='3'" get caption | findstr.exe /C:":""`) DO (
		Call :RdDisk "%%i"
	)
pause
Exit /B

:RdDisk
	For %%j In (%ExcDisk%) Do If /I %1==%%j Exit /B
	Pushd "%~1\" &&(
		For %%j In (%DelBox%) Do 2>nul Rd /S /Q %%j
		Popd
	)
	For /f "usebackq delims=" %%j In (`2^>nul Dir "%~1\" /B /A:D`) Do Call :RdSub "%~1\%%j"
Exit /B

:RdSub
	For %%s In (%ExcRoot%) Do If /I %%s==%1 Exit /B 0
	Pushd "%~1\" &&(
		For %%s In (%DelBox%) Do 2>nul Rd /S /Q %%s
		For /f "usebackq delims=" %%s In (`2^>nul Dir %DelBox% /B /S /A:D`) Do 2>nul Rd /S /Q "%%s"
		Popd
	)
Exit /B

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

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

Отправлено: 00:42, 20-03-2021 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - ПОИСК файлов на всех дисках с последующей отправкой их на FTP. ariolit Скриптовые языки администрирования Windows 3 10-10-2015 15:32
CMD/BAT - Поиск файлов по маске на удаленных машинах по словарю с выгрузкой в *.txt gremlintv2 Скриптовые языки администрирования Windows 3 09-12-2013 04:46
CMD/BAT - [решено] Удаление всех файлов с одним именем на всех дисках ZARG-X Скриптовые языки администрирования Windows 3 08-03-2010 11:53
CMD/BAT - [решено] Удаление всех папок с одним именем на всех дисках volk1234 Скриптовые языки администрирования Windows 15 13-11-2009 02:13




 
Переход