Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление заданного количества файлов из папки (http://forum.oszone.net/showthread.php?t=337177)

UserName1989 14-10-2018 19:32 2835864

Удаление заданного количества файлов из папки
 
Здравствуйте!

Подскажите, пожалуйста, каким образом можно зациклить удаление n первых по алфавиту файлов из папки?
Заранее благодарю :hi:

mwz 14-10-2018 19:59 2835867

Цитата:

Цитата UserName1989
зациклить удаление n первых по алфавиту файлов из папки? »

Т.е. чтобы в итоге из папки удалилось вообще всё? :sorry:

UserName1989 14-10-2018 20:07 2835869

mwz, нет, удалить все файлы проще)
А тут, к примеру, только первые пять...

И с паузой удалять по 5 файлов до тех пор, пока в папке не останется меньше пяти, но с этой частью всё понятно, а вот удаление конкретного количества - проблемка :sorry:

alpap 14-10-2018 20:26 2835873

это:
Код:

dir /a-d/b "C:\papka"|more +5
отправить на удаление
а паузу добавляйте, если надо, а если все это поместить в вывод for /l - получим цикл удаления пятерок, единственно надо посчитать все файлы заранее чтобы кол-во в for /l взять с запасом, но можно и точнее все сделать при желании, причем вариантов не один.

UserName1989 14-10-2018 21:09 2835881

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

У меня вышло нечто вот такое, но явно косяк в удалении...

alpap 14-10-2018 22:31 2835886

Цитата:

Цитата UserName1989
явно косяк в удалении.. »

в точку, надо то что в 4м п. в for /f оборачивать чтобы вывести для del то что ему удалять.

megaloman 14-10-2018 23:41 2835891

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


alpap 15-10-2018 00:42 2835895

если я правильно понимаю задание, то надо удалять из папки файлы пачками по 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 15-10-2018 11:28 2835935

Напоминает:
"- А хотите я его стукну? И он станет фиолетовым в крапинку!"©цитата
:)

alpap 15-10-2018 11:56 2835940

YuS_2, ага, ..., подобных бы товарищей всех во фриланс да под кругленькую сумму и условие научились бы писать правильно и полно и примеры бы привели и у препода 10 раз уточнили что он хочет.

YuS_2 15-10-2018 15:37 2835971

Вот именно! Какой такой практический смысл удаления файлов с паузами, да ещё и по алфавиту? Жесть какая-то... таких преподавателей нельзя допускать до обучения студентов, ибо фантазия совсем не в правильную сторону направлена...

UserName1989 15-10-2018 17:14 2835981

megaloman, alpap, благодарствую, что помогли разобраться в непонятном моменте :hi:

alpap 15-10-2018 23:50 2836053

Цитата:

Цитата YuS_2
да ещё и по алфавиту »

а кстати!
я, например, проверял на таких файлах:
Скрытый текст

Код:

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 по умолчанию включена сортировка по алфавиту. И в таком же порядке файлы и удаляться будут. Или постепенное увеличение счета не имеет отношения к сортировке по алфавиту?

Iska 16-10-2018 06:12 2836067

Цитата:

Цитата alpap
а ведь в команде выше в dir по умолчанию включена сортировка по алфавиту. И в таком же порядке файлы и удаляться будут. »

Не так.

В лексикографическом порядке файлы будут расположены на разделе с файловой системой NTFS (поскольку там сами записи в каталоге уже располагаются в упорядоченном B+-дереве). На FAT12/16/32 — в хронологическом порядке (по дате создания). dir тут ничего не изобретает, а просто выдаёт то, что возвращают ей функции WinAPI FindFirstFile/FindNextFile. И любые шаблонные операции (например, copy *.txt, del *.*) будут производить операции в таком же порядке.


Время: 02:56.

Время: 02:56.
© OSzone.net 2001-