Войти

Показать полную графическую версию : Удаление файлов по маске


IlyaBarkov
13-10-2013, 14:24
Все привет!
Столкнулся с такой задачей, не знаю, как решить.
-------------
Есть каталог F:\Files\
В нём огромное количество JPG-файлов (порядка 1 млн). Они хранятся во вложенных каталогах вида F:\Files\a\b\c\
Нужное проверить все вложенные в F:\Files\ каталоги и удалить все JPG-файлы, имя которых начинается с test18@ (например, test18@abcdef-123-fhd.jpg)
Имена каталогов - 1 буква из списка: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
-------------
Спасибо за помощь :)

Foreigner
13-10-2013, 14:49
Вообще можно и без батника:

del /s f:\media\photos\13@*.jpg

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

@echo off

for /d %%i in (f:\media\photos\*) do start /b cmd /c (del "%%i\13@*.jpg")

IlyaBarkov
13-10-2013, 15:03
Foreigner, спасибо!

Файлов, подлежащих удалению, примерно 25-30% от общего количества.
Если удаляться будет не более нескольких часов (допустим, 2-3), то задержка некритична — это разовая задача, не для регулярного запуска. Как думаете, удаление 300-500к файлов уложится в эти 2-3 часа?

Foreigner
13-10-2013, 21:45
IlyaBarkov, Ну как, удалились? Сmd.exe не затупил на таких объемах?

IlyaBarkov
13-10-2013, 21:52
Вообще можно и без батника:
Код:
del /s f:\media\photos\13@*.jpg »

Расскажу о результате:
530.000 файлов удалились за полтора часа при запуске через cmd вышеописанной команды.

Компьютер при этом не зависал, всё работало в штатном режиме.

Спасибо за помощь!

sov44
15-10-2013, 00:10
Можно ли ускорить выполнение кода, запустив его в несколько потоков?
@echo off
setlocal enabledelayedexpansion

set "Rash="c:\*.log" "c:\*.temp" "c:\*.tmp""

for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /a:-h %Rash% 2^>nul`) do (
2>nul del /q "%%i" | 1>nul findstr "."
if errorlevel 1 (
echo %%i | >nul findstr /rc:"V01." || (
2>nul set /a iSumL +=%%~zi
)))
echo %iSumL%
pause

Iska
15-10-2013, 05:03
Можно ли ускорить выполнение кода, запустив его в несколько потоков? »
Если Вы про подобное:
Но боюсь, что 1.5 млн файлов будут долго удаляться. Можно попробовать запустить несколько параллельных удалений: »
то, на самом деле — нет, нельзя. Любые линейные «потоки» будут упираться в один жёсткий диск.




© OSzone.net 2001-2012