Показать полную графическую версию : [решено] Удалить лишние файлы
Patroklos
02-06-2019, 16:30
Здравствуйте, нужна помощь в решении следующей задачи.
Есть папка .\temp в которой лежат 300 файлов.
Часть файлов больше 1 мегабайта часть файлов менее 100 килобайт.
Нужно удалить (delete) все файлы которые менее 100 килобайт.
Подскажите пожалуйста каким способом лучше всего решить задачу.
Нужно удалить (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
Patroklos
04-06-2019, 19:04
dir $folder -file|? length -lt 100kb|ri »
Спасибо. Работает но у дёргать пош из батника не путь самурая.
Выспавшись, на свежую голову написал на смд.
Кстати подскажите пожалуйста на будущее как в вашем примере искать рекурсивно.
То есть если в папке .\temp\ лежат папки с файлами.
megaloman
04-06-2019, 21:18
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 знаков
Patroklos
04-06-2019, 21:34
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
Покритикуете?
Работает но у дёргать пош из батника не путь самурая. »
А это зависит от задачи... как у Шекспира: ехать или шашечки, вот в чем вопрос! :)
на будущее как в вашем примере искать рекурсивно. »
у командлета get-childitem есть параметр -recurse т.е. так:
dir $folder -file -rec
megaloman
04-06-2019, 22:14
Покритикуете? »@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 байт мы убъём без зазрения совести - у него отрицательная длина по цэмэдэшной арифметике. В первом коде я пытаюсь от этого застраховаться, поэтому накрутил всякого изврата. @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
Нужно удалить (delete) все файлы которые менее 100 килобайт. »
md 2del
robocopy /mov /max:102400 /r:0 /w:0 .\temp 2del\
rd /q /s 2del
можно одной строкой сделать
FORFILES /P %temp% /S /M * /C "cmd /c if @fsize GTR 100000 echo @path размер файла @fsize"
можно еще добавить /D -30
чтобы удалял только файлы старше 30 дней.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.