Показать полную графическую версию : [решено] Удаление заданного количества файлов из папки
UserName1989
14-10-2018, 19:32
Здравствуйте!
Подскажите, пожалуйста, каким образом можно зациклить удаление n первых по алфавиту файлов из папки?
Заранее благодарю :hi:
зациклить удаление n первых по алфавиту файлов из папки? »
Т.е. чтобы в итоге из папки удалилось вообще всё? :sorry:
UserName1989
14-10-2018, 20:07
mwz, нет, удалить все файлы проще)
А тут, к примеру, только первые пять...
И с паузой удалять по 5 файлов до тех пор, пока в папке не останется меньше пяти, но с этой частью всё понятно, а вот удаление конкретного количества - проблемка :sorry:
это:
dir /a-d/b "C:\papka"|more +5
отправить на удаление
а паузу добавляйте, если надо, а если все это поместить в вывод for /l - получим цикл удаления пятерок, единственно надо посчитать все файлы заранее чтобы кол-во в for /l взять с запасом, но можно и точнее все сделать при желании, причем вариантов не один.
UserName1989
14-10-2018, 21:09
alpap,
:M1
set /a S=0
for /f %%K in ('dir /a-d /b /o:n') do set /a S+=1
if !S! GEQ %N% (
for /l %%D in (1, 1, %N%) do del /f /q 'dir /a-d "C:\papka" '
timeout /t %X% /nobreak
)
GOTO M1
У меня вышло нечто вот такое, но явно косяк в удалении...
явно косяк в удалении.. »
в точку, надо то что в 4м п. в for /f оборачивать чтобы вывести для del то что ему удалять.
megaloman
14-10-2018, 23:41
UserName1989,@Echo Off
cls
chcp 866 >nul
Set "BoxIn=Z:\Папка с файлами"
Set "Mask=*"
Set /A Diskret=5
Pushd "%BoxIn%" || (Echo "%BoxIn%" not found &Pause &Exit /B 1)
chcp 437 >nul
Set /A N=0
FOR /F "usebackq tokens=1,2 delims= " %%i IN (`2^>nul Dir /A:-D`) DO If /I "%%j"=="File(s)" Set /A N=%%i
chcp 866 >nul
Set /A N=%N% %% %Diskret%
If %N%==0 Del /Q "%BoxIn%\*.%Mask%" 2>nul &Exit /B
FOR /F "usebackq Skip=%N% delims=" %%i IN (`2^>nul Dir /B /A:-D /O:-N "%BoxIn%\*.%Mask%"`) DO Del "%%i"
Exit /B@Echo Off
cls
chcp 866 >nul
Set "BoxIn=Z:\Папка с файлами"
Set "Mask=*"
Set /A Diskret=5
Set /A TPause=3
Pushd "%BoxIn%" || (Echo "%BoxIn%" not found &Pause &Exit /B 1)
chcp 437 >nul
:Begin
Set /A N=0
FOR /F "usebackq tokens=1,2 delims= " %%i IN (`2^>nul Dir /A:-D`) DO If /I "%%j"=="File(s)" Set /A N=%%i
Set /A N=%N%-%Diskret%
If Not %N% GTR 0 Exit /B
If %N% GTR 0 FOR /F "usebackq Skip=%N% delims=" %%i IN (`2^>nul Dir /B /A:-D /O:-N "%BoxIn%\*.%Mask%"`) DO Del "%%i"
TimeOut /T %TPause% /NOBREAK
GoTo :Begin
Exit /B
если я правильно понимаю задание, то надо удалять из папки файлы пачками по 5 штук с паузой после пачки
@echo off
set "d=C:\papka"
set "f=C:\file-log.txt"
set cnf=5
:l
setlocal enabledelayedexpansion
pushd "%d%"
2>nul dir /a-d/b|>nul find /v "" || goto :eof
for /f "delims=" %%a in ('2^>nul dir /a-d/b') do (
set /a n+=1& if !n! leq %cnf% (del "%d%\%%a"& >>%f% echo del "%d%\%%a")
)
timeout /t 3& >>%f% echo:
popd
endlocal
goto l
pause& exit
Специально ввел в код лог-файл именно в котором и можно увидеть как происходит удаление файлов по моему видению задания
(файлы удаляются пачками по 5шт с соответствующей записью в лог, если число файлов не было кратное 5ти, последняя пачка просто будет содержать число файлов менее 5ти, на работе кода никак не скажется - удалены будут тоже и отображены в логе
если то оставшееся кол-во файлов после удаления которое менее 5ти должно оставаться, а не удаляться, то 9ю строку:
2>nul dir /a-d/b|>nul find /v "" || goto :eof
заменить на:
for /f %%a in ('dir /a-d/b^|find /c /v ""') do if %%a lss %cnf% goto :eof
)
Напоминает:
"- А хотите я его стукну? И он станет фиолетовым в крапинку!"©цитата
:)
YuS_2, ага, ..., подобных бы товарищей всех во фриланс да под кругленькую сумму и условие научились бы писать правильно и полно и примеры бы привели и у препода 10 раз уточнили что он хочет.
Вот именно! Какой такой практический смысл удаления файлов с паузами, да ещё и по алфавиту? Жесть какая-то... таких преподавателей нельзя допускать до обучения студентов, ибо фантазия совсем не в правильную сторону направлена...
UserName1989
15-10-2018, 17:14
megaloman, alpap, благодарствую, что помогли разобраться в непонятном моменте :hi:
да ещё и по алфавиту »
а кстати!
я, например, проверял на таких файлах:
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
file7.txt
file8.txt
file9.txt
file10.txt
file11.txt
file12.txt
file13.txt
file14.txt
и достаточно даже командой
>spisok.txt dir /a-d/b "papka"
увидеть как имена файлов будут расположены в списке, а ведь в команде выше в dir по умолчанию включена сортировка по алфавиту. И в таком же порядке файлы и удаляться будут. Или постепенное увеличение счета не имеет отношения к сортировке по алфавиту?
а ведь в команде выше в dir по умолчанию включена сортировка по алфавиту. И в таком же порядке файлы и удаляться будут. »
Не так.
В лексикографическом порядке файлы будут расположены на разделе с файловой системой NTFS (поскольку там сами записи в каталоге уже располагаются в упорядоченном B+-дереве). На FAT12/16/32 — в хронологическом порядке (по дате создания). dir тут ничего не изобретает, а просто выдаёт то, что возвращают ей функции WinAPI FindFirstFile/FindNextFile. И любые шаблонные операции (например, copy *.txt, del *.*) будут производить операции в таком же порядке.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.