Показать полную графическую версию : [решено] Размер каталога
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), но чет я не силен в шеле... (
Заранее Спасибо!
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, а не подскажешь, как сделать так, чтобы он каждый файл в директории сравнивал на размер, и если находит такой, то как обычно Спасибо!
alemaxona, пожалуйста, ещё раз и уже по-русски.
alemaxona
24-02-2012, 11:25
Спасибо! Уже решил! Как обычно, мой язык вперед ленивых рук лезет... Спасибо за отклик!
Что-то арифметика не правильно считает размер скрытых папок, подскажите, где ошибка?
@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
Здесь:
C:\>set /a 2147483646 + 1
2147483647
C:\>set /a 2147483647 + 1
-2147483648
Числа слишком велики для арифметики командного процессора.
Немного запутался. Подскажите, как найти в директории Windows папки типа $NtUninstall?????????? и определить их размер а потом удалить их?
ferget, мне интересней понять cmd.
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
Кстати, под приведённую Вами маску попадают не все потребные папки.
Iska, расчёт и удаление скрытых папок - это дополнение одного большого скрипта в cmd.
За WSH спасибо, положу в копилку :)
п.с. подскажите аналог:: бла-бла в WSH, VBS
sov44, некорректным меткам в пакетном файле аналога в WSH нет ;).
некорректным меткам в пакетном файле аналога в WSH нет »
имелось ввиду не метка, а комментарий (или как там его.. :))
Как насчёт варианта решения задачи пост 9 ?
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 ? »
Свой вариант я озвучил выше.
Язык — всего лишь инструмент. Какой окажется наиболее приемлем для решения задачи — тот и берётся.
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 »
Согласен, но "Привычка - вторая натура" :(
Согласен, но "Привычка - вторая натура" »
Угу. Даже, вон Colorer (http://ru.wikipedia.org/wiki/Colorer) научили отображать «::» как комментарий, хотя это и неправильно.
Даже, вон Colorer научили отображать «::» как комментарий »
Это не я, это коллега AZJIO, хотя мне это (http://forum.oszone.net/post-1677041.html#post1677041) нравится, т.к., я использовал «::», пусть и неправильно, но умышленно, как комментарий.
Необходимо исключить из расчёта динамический файл 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.