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

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

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

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


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

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


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

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

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

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

 
x0r x0r вне форума

Забанен


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

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


Прога Everything и её консольная версия. один раз построил индекс(~минута), затем запрос в базу и удаление по списку. тулза умеет регулярки :
Скрытый текст
Код: Выделить весь код
=>es --help
-r Search the database using a basic POSIX regular expression.
-i Does a case sensitive search.
-w Does a whole word search.
-p Does a full path search.
-h --help Display this help.
-n <num> Limit the amount of results shown to <num>.
-s Sort by full path.

Отправлено: 18:06, 03-12-2016 | #2



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

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


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


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

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


x0r, как Вы можете представить эту утилиту в моей задаче? Смысл строить индекс для файла, подлежащего удалению, а также в принципе использование стороннего ПО - я не вижу. Тем более, когда cmd может выполнить мою задачу на 100%...

Отправлено: 18:22, 03-12-2016 | #3

x0r x0r вне форума

Забанен


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

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


а ты попробуй сначала, потом будешь домысливать. Это не "тот индекс", это другой, годный ;-)
батнегом ты будешь искать долго-и-нудно, Everithing найдет за секунду. Одну секунду. Везде. Построит список. Надо только обработать готовый список через for /f ...

Отправлено: 19:01, 03-12-2016 | #4


Аватара для NickM

Ветеран


Contributor


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

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


Цитата x0r:
батнегом ты будешь искать долго-и-нудно »
Код: Выделить весь код
dir c:\*.sys /b /s /a-d

Отправлено: 19:21, 03-12-2016 | #5


Ветеран


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

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


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



С учётом вышеизложенного:

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

:: Здесь указываете расширения удаляемых файлов (именно так, как написано в этом примере):
set "ext=.txt/.log/.dat"

for /f "skip=1" %%i in ('wmic LogicalDisk where DriveType^=3 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 (
            >>del.log echo del /a /f "%%k"
        )
    )
)

endlocal
exit /b
.

Если в созданном в кодировке OEM-866 логе «del.log» будут записаны именно подлежащие удалению файлы, то для реального их удаления уберите из кода выделенное красным цветом.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:04, 03-12-2016 | #6

x0r x0r вне форума

Забанен


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

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


NickM, это понятно, можно и так, если нада переносимость и ничего не скачивать.
Код: Выделить весь код
ren Замени move на del если уверен что надо удалить файлы.
@echo off
@chcp 866
dir /b /s "c:\Users\HomeUser\Downloads\*.exe" >list.txt
type list.txt
set /p S=   ¤¤¤   Удалить эти файлы?   ¤¤¤ [ "y" - Да  ] :
if /i %S% NEQ y goto :EOF
for /f %%i in (list.txt) do move "%%i" "%%i.bk551"
rem удаление
rem for /f %%i in (list.txt) do del /Q /F "%%i"
exit
Everithing интересна своими регулярками. Давно пользуюсь. писать батники для удаления по маске перестал, ибо тут все за секунды находится, выделяется и удаляется. Но так тоже можно ;-)

Отправлено: 20:25, 03-12-2016 | #7


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


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

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


Georgio, спасибо огромное! Ищет что надо и где надо!!
А сложно ли будет доработать скрипт так, чтобы он еще на съемных дисках (а-ля флешки и внешние винты) искал?

x0r, у нас есть перечень разрешенного к использованию ПО, куда не входит эта утилита. Поэтому, даже если закрыть глаза на неудобство привлечения стороннего ПО, согласовать с СКЗ это тот еще геморрой...

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


Ветеран


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

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


n1gt, попробуйте:

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

Отправлено: 21:04, 03-12-2016 | #9


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


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

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


Georgio, Все отлично, спасибо за решение!

Отправлено: 21:54, 03-12-2016 | #10



Компьютерный форум 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




 
Переход