PDA

Показать полную графическую версию : [решено] Удалить папку если её размер больше 100 Gb


fokanik
31-10-2015, 23:29
Здравствуйте, как проверить размер занимаемого места на разделе для определенной папки, и если он превышает лимит - удалить папку минуя корзину?

@echo off

if not exist "c:\_acestream_cache_\" (
exit
)

<--- Если размер больше 100 gb --->

RD /s/q "c:\_acestream_cache_\"
del /f /q %appdata%\.ACEStream\buffer\*.*
::del /f /q %appdata%\.ACEStream\collected_torrent_files\*.*
del /f /q %appdata%\.ACEStream\dlcheckpoints\*.*
del /f /q %appdata%\.ACEStream\dldcheckpoints\*.*
del /f /q %appdata%\.ACEStream\*.log

exit

Foreigner
31-10-2015, 23:46
@echo off
setlocal

for /f "tokens=1" %%i in ('dfp "C:\Folder" /s') do set "size=%%i"
if %size% geq 107374182400 rd /s /q "C:\Folder"


Должно работать на 8-ке и 10-ке. Не знаю есть ли dfp.exe в предыдущих версиях.

Iska
01-11-2015, 00:03
Не знаю есть ли dfp.exe в предыдущих версиях. »
Немае :(.

А сработает ли сравнение как числовое? В ранних версиях были ограничения 2^32-1, помнится.

Foreigner
01-11-2015, 00:15
Iska, Точно, не работает, надо нули добавлять в начало (я сравнивал равное кол-во знаков 400Gb co 100Gb):

@echo off
setlocal

for /f "tokens=1" %%i in ('dfp "C:\Folder" /s') do set "size=000000000000%%i"

if %size:~-12% geq 107374182400 rd /s /q "C:\Folder"

Iska
01-11-2015, 00:59
Foreigner, ещё один возможный подводный камень — не попытается ли «if» воспринимать некоторые строки, начинающиеся с «0…», как восьмеричные (не проверял)?

Foreigner
01-11-2015, 08:43
Iska, воспринимать некоторые строки, начинающиеся с «0…», как восьмеричные »
В самом вопросе противоречие. При равной длине строк сравнение будет корректным, т.к коды символов идут подряд:

0..9 | % { [int][char]"$_" } # 48..57

fokanik
01-11-2015, 15:03
Должно работать на 8-ке и 10-ке. Не знаю есть ли dfp.exe в предыдущих версиях. »

Windows 7: "dfp" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Iska
01-11-2015, 16:10
fokanik, попробуйте на WSH (не проверялось):
Option Explicit

Dim strSourceFolder
Dim strACEStreamFolderInAppData
Dim strTemplate


With WScript.CreateObject("Scripting.FileSystemObject")
strSourceFolder = "c:\_acestream_cache_"

If .FolderExists(strSourceFolder) Then
.DeleteFolder strSourceFolder, True

strACEStreamFolderInAppData = .BuildPath(WScript.CreateObject("Shell.Application").NameSpace("shell:AppData").self.Path, ".ACEStream")

For Each strTemplate In Array( _
"buffer\*.*", _
"dlcheckpoints\*.*", _
"dldcheckpoints\*.*", _
"*.log" _
)
.DeleteFile objFSO.BuildPath(strACEStreamFolderInAppData, strTemplate), True
Next
Else
' Nothing to do
End If
End With

WScript.Quit 0

greg zakharov
01-11-2015, 16:11
fokanik, дык Вы бы сразу озвучили версию системы. Можно попытать счастья такой командой:@powershell /nop /ex bypass "&{if((ls -r($$='C:\Folder')|?{!$_.PSIsContainer}|measure -pr length -s).Sum -ge 100Gb){ri $$ -for}}"Если не нравится вызывать из консоли posh, можно прибегнуть к утонченным извращениям с robocopy, благо в семерке он поставляется в комплекте; нужно обратить внимание на ключи /L, /MAX и, если память не изменяет, /MIR. Если подобный садомизм не для Вас, можно пойти по пути пролетариата гибридов: cmd+mshta, cmd+javascript и дыр и пыр в этом пирдухе.

fokanik
01-11-2015, 16:56
fokanik, попробуйте на WSH (не проверялось): »

Не знаю как это запускается.

Можно попытать счастья такой командой: »

Закинул эту строчку в батник, работает, спасибо :oszone: Дыр, пир, mir - не треба.

Foreigner
01-11-2015, 17:08
fokanik, Если нет dfp.exe, тогда по-старинке:

@echo off
1>nul chcp 437
setlocal

for /f "tokens=3" %%i in ('dir /a-d /s /-c "C:\Folder" ^| findstr "File(s)"') do set "n=000000000000%%i"
if "%n:~-12%" geq "107374182400" rd /s /q "C:\Folder"

1>nul chcp 866

Iska
01-11-2015, 17:37
Не знаю как это запускается. »
Сохранить приведённый код в файл с расширением «.vbs».

Georgio
01-11-2015, 18:10
Foreigner,

D:\Test>if 107374182399 geq 107374182400 echo Yes!
Yes!

.

Foreigner
01-11-2015, 18:48
Georgio,

if "107374182399" geq "107374182400" echo Yes!

Georgio
01-11-2015, 18:53
Foreigner, верно, эти числа можно сравнивать только лексикографически.




© OSzone.net 2001-2012