Войти

Показать полную графическую версию : [решено] Размер каталога


Страниц : [1] 2

alemaxona
22-02-2012, 08:34
Добрый день, форумчане, помогите пожалуйста со скриптом! Есть скрипт (так же с форума :)), который подсчитывает размер определенной папки:

@Echo Off
chcp 1251
SetLocal enabledelayedexpansion
Set DirProg=F:\PROB4_razmer directorii\temp

For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do (
If !flag!==1 Set dirsize=%%c
If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
)
Set /a dirsizeT=dirsize+0
If Not "%dirsizeT%"=="%dirsize%" Echo Число %dirsize% слишком велико для обработки в CMD&Pause>nul&Exit
Pause>nul

Помогите пожалуйста сделать условие: Если каталог имеет размер больше 1мб, то вызывается vbs скрипт, иначе просто закрытие!
Пробовал писать нечто подобное (If "dirsize" GEQ 1048576 START /WAIT CScript... else), но чет я не силен в шеле... (
Заранее Спасибо!

Iska
22-02-2012, 10:27
alemaxona, проще расширить скрипт VBScript, наподобие:
Option Explicit

Dim objFSO

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.GetFolder("c:\Temp").Size > 2^20 Then
' Здесь код из «старого» скрипта VBS
End If

Set objFSO = Nothing

WScript.Quit 0

alemaxona
22-02-2012, 11:15
Iska, спасибо большое! Выручили! :)

alemaxona
24-02-2012, 11:05
Iska, а не подскажешь, как сделать так, чтобы он каждый файл в директории сравнивал на размер, и если находит такой, то как обычно Спасибо!

Iska
24-02-2012, 11:17
alemaxona, пожалуйста, ещё раз и уже по-русски.

alemaxona
24-02-2012, 11:25
Спасибо! Уже решил! Как обычно, мой язык вперед ленивых рук лезет... Спасибо за отклик!

sov44
12-04-2012, 22:27
Что-то арифметика не правильно считает размер скрытых папок, подскажите, где ошибка?

@Echo Off
SetLocal enabledelayedexpansion

set Cnt=10
call :CalcAndDel_3 %WINDIR%\^$NtUninstall?????????? AH
Set /A Cnt +=dirsize1
Echo %Cnt%
pause
exit /b

:CalcAndDel_3
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%1" /-C /%2') Do (
If "%%b"=="папок" (Set flag=1) Else (Set flag=0)
if !flag!==1 Set dirsize1=%%c
)
exit /b

Iska
13-04-2012, 00:11
Здесь:
C:\>set /a 2147483646 + 1
2147483647

C:\>set /a 2147483647 + 1
-2147483648

Числа слишком велики для арифметики командного процессора.

sov44
13-04-2012, 12:16
Немного запутался. Подскажите, как найти в директории Windows папки типа $NtUninstall?????????? и определить их размер а потом удалить их?

ferget
13-04-2012, 12:26
возьмите VBS

sov44
13-04-2012, 12:57
ferget, мне интересней понять cmd.

Iska
13-04-2012, 15:00
sov44, и напрасно: в WSH объект Folder имеет свойство «.Size»:
Option Explicit

Dim objRegExp
Dim objFolder


Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
.IgnoreCase = True
.Pattern = "^\$NtUninstall.+\$$"
End With

With WScript.CreateObject("Scripting.FileSystemObject")
For Each objFolder In .GetSpecialFolder(0).SubFolders
If objRegExp.Test(objFolder.Name) Then
WScript.Echo objFolder.Name, objFolder.Size
End If
Next
End With

Set objRegExp = Nothing

WScript.Quit 0

Кстати, под приведённую Вами маску попадают не все потребные папки.

sov44
13-04-2012, 16:50
Iska, расчёт и удаление скрытых папок - это дополнение одного большого скрипта в cmd.
За WSH спасибо, положу в копилку :)
п.с. подскажите аналог:: бла-бла в WSH, VBS

Iska
13-04-2012, 17:32
sov44, некорректным меткам в пакетном файле аналога в WSH нет ;).

sov44
13-04-2012, 20:44
некорректным меткам в пакетном файле аналога в WSH нет »
имелось ввиду не метка, а комментарий (или как там его.. :))
Как насчёт варианта решения задачи пост 9 ?

Iska
14-04-2012, 00:53
sov44, комментарии в пакетном файле оформляются единственным способом — при помощи команды Rem (http://technet.microsoft.com/en-us/library/bb490986.aspx).

На WSH сие выглядит следующим образом: VBScript — Rem Statement (http://msdn.microsoft.com/en-us/library/kyyd7ef1(v=vs.84).aspx); JScript — Comment Statements (Windows Scripting - JScript) (http://msdn.microsoft.com/en-us/library/6s6fab9k(v=vs.84).aspx).

Как насчёт варианта решения задачи пост 9 ? »
Свой вариант я озвучил выше.

Язык — всего лишь инструмент. Какой окажется наиболее приемлем для решения задачи — тот и берётся.

gora
14-04-2012, 11:33
sov44, попробуйте так:@Echo Off
SetLocal EnableDelayedExpansion
:: Папка для поиска
Set folder=e:\Temp 1\upd
Set Cnt=0
:: Для папок подпадающих под маску
For /F "tokens=*" %%a In ('Dir "%folder%" /ADH /B ^| FindStr "$NtUninstallKB[0-9]*"') Do Call :_sizeDir "%folder%\%%a"
:: Для папок НЕ подпадающих под маску
For %%a In ($hf_mig$ $abde_rew$) Do Call :_sizeDir "%folder%\%%a"
Pause>Nul

:_sizeDir
Set dirsize=0
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%~1" /-C /S /A:-D') Do (
If !flag!==1 Set dirsize=%%c
If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
)
Set /a dirsizeT=dirsize+0
If Not "%dirsizeT%"=="%dirsize%" Echo Число %dirsize% слишком велико для обработки в CMD&Pause>Nul&Exit
Set /A Cnt +=dirsize
Echo "%~1"
Echo DirSize=%dirsize% TotalSize=%Cnt%
Echo.
GoTo :EOFкомментарии в пакетном файле оформляются единственным способом — при помощи команды Rem »
Согласен, но "Привычка - вторая натура" :(

Iska
14-04-2012, 12:58
Согласен, но "Привычка - вторая натура" »
Угу. Даже, вон Colorer (http://ru.wikipedia.org/wiki/Colorer) научили отображать «::» как комментарий, хотя это и неправильно.

gora
14-04-2012, 13:11
Даже, вон Colorer научили отображать «::» как комментарий »
Это не я, это коллега AZJIO, хотя мне это (http://forum.oszone.net/post-1677041.html#post1677041) нравится, т.к., я использовал «::», пусть и неправильно, но умышленно, как комментарий.

sov44
17-04-2012, 14:49
Необходимо исключить из расчёта динамический файл CMD.EXE-087B4001.pf
Возникла сложность с его обозначением.

For /F "skip=4 tokens=1-3" %%a IN ('Dir "%windir%\Prefetch" /-C /S /A:-D 2^>nul') Do (
if not exist CMD.EXE*********.pf (
If !flag!==1 Set dirsize=%%c
If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
))
Set /A Cnt +=dirsize




© OSzone.net 2001-2012