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

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

fokanik 31-10-2015 23:29 2570250

Удалить папку если её размер больше 100 Gb
 
Здравствуйте, как проверить размер занимаемого места на разделе для определенной папки, и если он превышает лимит - удалить папку минуя корзину?

Код:

@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 2570254

Код:

@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 2570258

Цитата:

Цитата Foreigner
Не знаю есть ли dfp.exe в предыдущих версиях. »

Немае :(.


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

Foreigner 01-11-2015 00:15 2570259

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 2570266

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

Foreigner 01-11-2015 08:43 2570285

Iska,
Цитата:

Цитата Iska
воспринимать некоторые строки, начинающиеся с «0…», как восьмеричные »

В самом вопросе противоречие. При равной длине строк сравнение будет корректным, т.к коды символов идут подряд:
Код:

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

fokanik 01-11-2015 15:03 2570402

Цитата:

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

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

Iska 01-11-2015 16:10 2570423

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 2570424

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 2570441

Цитата:

Цитата Iska
fokanik, попробуйте на WSH (не проверялось): »

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

Цитата:

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

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

Foreigner 01-11-2015 17:08 2570445

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 2570457

Цитата:

Цитата fokanik
Не знаю как это запускается. »

Сохранить приведённый код в файл с расширением «.vbs».

Georgio 01-11-2015 18:10 2570466

Foreigner,

Цитата:

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

Foreigner 01-11-2015 18:48 2570476

Georgio,
Код:

if "107374182399" geq "107374182400" echo Yes!

Georgio 01-11-2015 18:53 2570479

Foreigner, верно, эти числа можно сравнивать только лексикографически.


Время: 20:23.

Время: 20:23.
© OSzone.net 2001-