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

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

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

Пользователь


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

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


Здравствуйте, нужна помощь в решении следующей задачи.
Есть папка .\temp в которой лежат 300 файлов.
Часть файлов больше 1 мегабайта часть файлов менее 100 килобайт.
Нужно удалить (delete) все файлы которые менее 100 килобайт.
Подскажите пожалуйста каким способом лучше всего решить задачу.

Отправлено: 16:30, 02-06-2019

 

Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Patroklos:
Нужно удалить (delete) все файлы которые менее 100 килобайт. »
powershell
Код: Выделить весь код
#requires -v 3.0
$folder = '.\temp'
dir $folder -file|? length -lt 100kb|ri
или
Код: Выделить весь код
#requires -v 2.0
$folder = '.\temp'
dir $folder|?{!$_.psiscontainer -and $_.length -lt 100kb}|ri

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

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

Отправлено: 17:49, 02-06-2019 | #2



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

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


Пользователь


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

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


Цитата YuS_2:
dir $folder -file|? length -lt 100kb|ri »
Спасибо. Работает но у дёргать пош из батника не путь самурая.
Выспавшись, на свежую голову написал на смд.
Кстати подскажите пожалуйста на будущее как в вашем примере искать рекурсивно.
То есть если в папке .\temp\ лежат папки с файлами.

Отправлено: 19:04, 04-06-2019 | #3


Ветеран


Contributor


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

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


Patroklos,
Код: Выделить весь код
@Echo Off
	Set "BoxIn=z:\Box_In"
	Set /A SS=102400 ||Exit /b 2
	
	Set /A N=-1
	:Begin
		Set /A N+=1
		Call Set "SSS=%%SS:~%N%,1%%"
	If Not "%SSS%"=="" GoTo :Begin
	If %N% GTR 9 Echo %SS% too large &Exit /b 2
	Set /A N+=1
		
	FOR /F "usebackq delims=" %%i IN (`2^>nul Dir "%BoxIn%\*.*" /S /B /A:-D`) DO Call :DelSize "%%i" %%~zi %SS% %N% 
Exit /B

:DelSize
	Set "SSS=%2"
	Call Set "SSS=%%SSS:~%4,1%%" 
	If Not "%SSS%"=="" Exit /B
	If %2 GTR %3 Exit /B
	Del %1
Exit /B
Максимальный размер удаляемых файлов не более 9 знаков

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


Последний раз редактировалось megaloman, 04-06-2019 в 23:38.

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

Отправлено: 21:18, 04-06-2019 | #4


Пользователь


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

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


megaloman, обожаю читать ваш код. Каждый раз маленький шедевр. Многому учусь.
Мой код намного проще. Видимо не все нюансы учёл. Вот что у меня получилось.
Код: Выделить весь код
setlocal enabledelayedexpansion
set SizeToTerminate=1000
FOR %%A IN (".\files\*.txt") DO ( 
set size=%%~zA
call :Terminator !size!
)
pause>nul
:Terminator
if %~1 lss %SizeToTerminate% ( echo File size Less From %SizeToTerminate% and Equal %~1
	) else (
		 echo File size Greater From %SizeToTerminate% and Equal %~1 )
goto :eof
Покритикуете?

Отправлено: 21:34, 04-06-2019 | #5


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Patroklos:
Работает но у дёргать пош из батника не путь самурая. »
А это зависит от задачи... как у Шекспира: ехать или шашечки, вот в чем вопрос!

Цитата Patroklos:
на будущее как в вашем примере искать рекурсивно. »
у командлета get-childitem есть параметр -recurse т.е. так:
Код: Выделить весь код
dir $folder -file -rec

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

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

Отправлено: 22:09, 04-06-2019 | #6


Ветеран


Contributor


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

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


Цитата Patroklos:
Покритикуете? »
Кто умеет/хочет делать - делает, кто не умеет/не хочет - критикует. Если хотите намного проще, натека:
Код: Выделить весь код
@Echo Off
	Set "BoxIn=z:\Box_In"
	Set /A SS=44000 ||Exit /b 2
	
	FOR /F "usebackq delims=" %%i IN (`2^>nul Dir "%BoxIn%\*.*" /S /B /A:-D`) DO (
		If %%~zi LEQ %SS% Del "%%i" 
	)
Exit /B
Критикую оба решения, это моё и Ваше: если среди файлов будет файл длиннее 2147483647 байт арифметика работать не будет. Что получится, лень думать. Попробуйте
Код: Выделить весь код
@Echo Off
cls
	Set /A Max=1000

	Set /A A=2147483647
	If %A% GEQ %Max% (Echo %A% ^>=  %Max%) Else (Echo %A% ^<  %Max%)
	
	Set /A A=2247483647
	If %A% GEQ %Max% (Echo %A% ^>=  %Max%) Else (Echo %A% ^<  %Max%)
pause
То есть файл длиной 2247483647 байт мы убъём без зазрения совести - у него отрицательная длина по цэмэдэшной арифметике. В первом коде я пытаюсь от этого застраховаться, поэтому накрутил всякого изврата.
Первый код, кстати, можно подсократить, но он тоже будет работать с длинами файла не более 9 знаков:
Код: Выделить весь код
@Echo Off
	Set "BoxIn=z:\Box_In"
	Set /A SS=102400 ||Exit /B 2

	If Not "%SS:~9,1%"=="" (Echo %SS% too large &Exit /B 1)	
		
	FOR /F "usebackq delims=" %%i IN (`2^>nul Dir "%BoxIn%\*.*" /S /B /A:-D`) DO (
		Call :DelSize "%%i" %%~zi %SS% 9 
	)
Exit /B

:DelSize
	Set "SSS=%2"
	Call Set "SSS=%%SSS:~%4,1%%" 
	If Not "%SSS%"=="" Exit /B
	If %2 GTR %3 Exit /B
	Del %1
Exit /B

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


Последний раз редактировалось megaloman, 05-06-2019 в 00:03.

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

Отправлено: 22:14, 04-06-2019 | #7


Ветеран


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

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


Цитата Patroklos:
Нужно удалить (delete) все файлы которые менее 100 килобайт. »
Код: Выделить весь код
md 2del
robocopy  /mov /max:102400 /r:0 /w:0  .\temp 2del\
rd /q /s 2del

-------
консольный клиент telegram для Windows: www.elapser.info

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

Отправлено: 09:38, 05-06-2019 | #8


Старожил


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

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


можно одной строкой сделать
FORFILES /P %temp% /S /M * /C "cmd /c if @fsize GTR 100000 echo @path размер файла @fsize"

можно еще добавить /D -30
чтобы удалял только файлы старше 30 дней.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:50, 11-06-2019 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удалить лишние строки из txt aos Скриптовые языки администрирования Windows 25 10-07-2012 17:08
удалить лишние файлы binders Вебмастеру 3 29-09-2011 17:50
Интернет - [решено] Как удалить или скрыть лишние компьютеры в Сети? VeRtex-2010 Microsoft Windows 7 10 09-04-2011 23:53
7 / 2008 R2 - [решено] Как удалить лишние дистрибутивы Win7 rushen Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 19 01-11-2010 22:08
Разное - [решено] Как удалить лишние виртуальные приводы? juliahka Хочу все знать 5 15-07-2010 06:49




 
Переход