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

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

Ответить
Настройки темы
CMD/BAT - [решено] Удаление заданного количества файлов из папки

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


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

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


Здравствуйте!

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

Отправлено: 19:32, 14-10-2018

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата UserName1989:
зациклить удаление n первых по алфавиту файлов из папки? »
Т.е. чтобы в итоге из папки удалилось вообще всё?

-------
Mikhail Zhilin


Отправлено: 19:59, 14-10-2018 | #2



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

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


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


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

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


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

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

Отправлено: 20:07, 14-10-2018 | #3


Ветеран


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

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


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

Отправлено: 20:26, 14-10-2018 | #4


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


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

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


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
У меня вышло нечто вот такое, но явно косяк в удалении...

Отправлено: 21:09, 14-10-2018 | #5


Ветеран


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

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


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

Отправлено: 22:31, 14-10-2018 | #6


Ветеран


Contributor


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

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


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

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


Последний раз редактировалось megaloman, 15-10-2018 в 00:43.

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

Отправлено: 23:41, 14-10-2018 | #7


Ветеран


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

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


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

Последний раз редактировалось alpap, 15-10-2018 в 01:20.

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

Отправлено: 00:42, 15-10-2018 | #8


Аватара для YuS_2

Crazy


Contributor


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

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


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

-------
scio me nihil scire. Ѫ


Отправлено: 11:28, 15-10-2018 | #9


Ветеран


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

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


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

Отправлено: 11:56, 15-10-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Удаление файлов заданного расширения Папуас Программное обеспечение Windows 11 25-02-2019 15:04
CMD/BAT - [решено] Перемещение заданного количества файлов, начиная с первого по имени Alexander_88 Скриптовые языки администрирования Windows 2 27-08-2014 09:54
CMD/BAT - [решено] Перемещение заданного количества файлов, начиная с последнего по имени Alexander_88 Скриптовые языки администрирования Windows 6 21-08-2014 11:36
Удаление файлов из сетевой папки VERVIL Microsoft Windows NT/2000/2003 2 15-04-2010 05:22
Прочие - Программа (скрипт) удаление из заданного каталога заданных файлов __sa__nya Программное обеспечение Windows 1 20-11-2008 19:02




 
Переход