Set objArgs = WScript.Arguments
call ShowDriveInfo(objArgs(0))
Sub ShowDriveInfo(drvPath)
Dim fso, drv, s, fil,f1,f
Set fso = CreateObject("Scripting.FileSystemObject")
Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
Set f = fso.GetFolder(objArgs(0))
Set fc = f.SubFolders
For Each f1 in fc
s = s & f1.size
s = s & f1.name
s = s & VbCrLf
Next
msgbox s
End Sub
Set Argum = WScript.Arguments
If Argum.Count = 0 Then
a = MsgBox("Скрипт запущен без аргументов")
Else
' Подсчёт суммарного размера файлов в директории и всех поддиректориях по маске
' Исходные данные
iiiDir = Argum(0) ' Директория
Maska = "^.*\.xls$" ' Маска файла
' ---------------------------------------------
Set FSO = CreateObject("Scripting.FileSystemObject")
nFiles=0
Mess = SizeFilesDir(iiiDir, Maska)
Call AllFolders(iiiDir, Maska)
a = MsgBox("Директория: " + iiiDir + vbCrLf + "Маска: " + Maska + vbCrLf + "Суммарный размер файлов: " + CStr(Mess) + vbCrLf + "Количество файлов: " + CStr(nFiles))
End If
Sub AllFolders(inDir, inMaska) ' ---------------------------------------------
' Wscript.Echo inDir
Set F = FSO.GetFolder(inDir)
Set SubF = F.SubFolders
For Each Folder In SubF
' Wscript.Echo Folder.Name
Mess = Mess + SizeFilesDir(inDir + "" + Folder.Name, inMaska)
Call AllFolders(inDir + "" + Folder.Name, inMaska)
Next
End Sub
Function SizeFilesDir(iDir, iMaska) ' ---------------------------------------------
' Подсчет длины файлов в директории по маске
' iDir - ' Имя директории (без \ на конце)
' iMaska - ' Маска файлов (например "*.exe")
iSize = 0
Set Tdir = FSO.GetFolder(iDir)
Set AllFiles = Tdir.Files
' Set RE = CreateObject("VBscript.RegExp") ' Так Тоже можно
Set Re = New RegExp
Re.Pattern = iMaska
Re.MultiLine = False
Re.Global = True
Re.IgnoreCase = True
For Each iFile In AllFiles
If Re.Test(iFile.Name) Then
iSize=iSize+iFile.Size
nFiles=nFiles+1
End If
Next
SizeFilesDir = iSize
End Function
' ---------------------------------------------------------------------------
' Скрипт подсчитывает суммарный размер файлов по маске в папке и подпапках
' Вызов скрипта, например:
' SumSizeFile.vbs "F:" "XLS"
' SumSizeFile.vbs "C:\Program Files" "Exe"
' При наличии пробелов аргумент обязательно взять в кавычки
' ---------------------------------------------------------------------------
Set Argum = WScript.Arguments
If Argum.Count <2 Then ' Если при вызове скрипта кол-во аргументов <2 ничего не делаем
a = MsgBox("Скрипт запущен без аргументов")
Else
iiiDir = Argum(0) ' Директория (берём из аргумента)
Maska = "^.*\." + Argum(1) + "$" ' Формируем строку для регулярного выражение для маски файла (из аргумента)
' ---------------------------------------------
Set FSO = CreateObject("Scripting.FileSystemObject") ' Создаём объект для доступа к файловой системе
nFiles=0 ' Начальное значение кол-ва файлов
Mess = SizeFilesDir(iiiDir, Maska)
' Подсчитываем файлы и их длину в корне указанной директории
Call AllFolders(iiiDir, Maska) ' Подсчитываем файлы и их длину во всех поддиректориях
a = MsgBox("Директория: " + iiiDir + vbCrLf + "Маска: " + Maska + vbCrLf + "Суммарный размер файлов: " + CStr(Mess) + vbCrLf + "Количество файлов: " + CStr(nFiles))
End If
Sub AllFolders(inDir, inMaska) ' ---------------------------------------------
' Процедура рекурентно подсчитывает файлы и их длину в директории и поддиректориях
' inDir - путь директории
' inMaska - регулярное выражение с маской файлов
' Wscript.Echo inDir
On Error Resume Next ' Обработаем ситуацию, если встретилась директория без доступа
Set F = FSO.GetFolder(inDir) ' Создаём объект для доступа к директории
If Err.Number = 0 Then
Set SubF = F.SubFolders ' Создаём коллекцию поддиректорий в указ директории
For Each Folder In SubF ' Просматриваем каждый элемент коллекции (все директории)
' Wscript.Echo Folder.Name
Mess = Mess + SizeFilesDir(inDir + "" + Folder.Name, inMaska) ' Насуммируем число файлов и их длину
Call AllFolders(inDir + "" + Folder.Name, inMaska) ' Рекурентно Просматриваем каждый элемент коллекции (все директории)
Next
End If
End Sub
Function SizeFilesDir(iDir, iMaska) ' ---------------------------------------------
' Подсчет длины файлов в директории по маске
' iDir - ' Имя директории (без \ на конце)
' iMaska - ' Маска файлов (например "*.exe")
iSize = 0
On Error Resume Next ' Обработаем ситуацию, если встретилась директория без доступа
Set Tdir = FSO.GetFolder(iDir) ' Создаём объект для доступа к текущей директории
If Err.Number = 0 Then
Set AllFiles = Tdir.Files ' Для текущей директории создаём коллекцию файлов
' Set RE = CreateObject("VBscript.RegExp") ' Так Тоже можно
Set Re = New RegExp ' Создаём экземпляр регулярного выражения
Re.Pattern = iMaska ' Задаём маску
Re.MultiLine = False ' Текст однострочный
Re.Global = True ' будем проходить всю строку
Re.IgnoreCase = True ' игнорируем регистр символов
For Each iFile In AllFiles ' Просматриваем файлы в директории
If Re.Test(iFile.Name) Then ' Проверяем имя файла на соответствие рег выражению
iSize=iSize+iFile.Size ' Насуммируем размеры файлов
nFiles=nFiles+1 ' Насуммируем кол-во файлов
End If
Next
End If
SizeFilesDir = iSize
End Function
echo off
rem ----------------------------------------------------------------
rem В аргументе при вызове путь и имя файла или маска файла
rem Например (если в имени или пути есть пробел, обязательны кавычки
rem SumSizeFile.bat "C:\Program Files\*.xls"
rem SumSizeFile.bat C:\*.xls
rem ----------------------------------------------------------------
if "%1"=="" GoTo WithOut
Set ComDir=dir /s %1
Set S1=''
Set S2=''
For /F "usebackq delims==" %%a In (`%ComDir%`) Do Call :Stroka2 "%%a"
Call :Rezult %1 %S2%
GoTo End
rem ----------------------------------------------------------------
:Stroka2
Set S2=%S1%
Set S1=%1
GoTo End
rem ----------------------------------------------------------------
:Rezult
Echo ---------------------------------------------------------------
Echo %~1
Echo %~2
Echo ---------------------------------------------------------------
pause
GoTo End
:WithOut
Echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Echo Не указан аргумент командного файла
Echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pause
:End
В VBS Like не работает.
D:\>W.vbs c:\
D:\>W.vbs C:\
D:\>W.vbs C:\*.txt
D:\>W.vbs C:\ *.txt
D:\>w.vbs D:\
D:\>w.vbs E:\
Сценарий D:\W.vbs
Строка:61
Символ:5
Ошибка:Разрешение отклонено
Код:800А0046
Источник: Ошибка выполнения Microsoft VBScript
Директория D:\WORK\
Маска: ^.*\.xls$
Суммарный размер файлов: 0
Количество файлов:0
Сценарий D:\W.vbs
Строка:61
Символ:5
Ошибка:Разрешение отклонено
Код:800А0046
Источник: Ошибка выполнения Microsoft VBScript
Set Argum = WScript.Arguments
If Argum.Count <2 Then
a = MsgBox("Скрипт запущен без аргументов")
Else
' Подсчёт суммарного размера файлов в директории и всех поддиректориях по маске
' Исходные данные
iiiDir = Argum(0) ' Директория
Maska = "^.*\." + Argum(1) + "$" ' Маска файла
' ---------------------------------------------
Set FSO = CreateObject("Scripting.FileSystemObject")
nFiles=0
Mess = SizeFilesDir(iiiDir, Maska)
Call AllFolders(iiiDir, Maska)
a = MsgBox("Директория: " + iiiDir + vbCrLf + "Маска: " + Maska + vbCrLf + "Суммарный размер файлов: " + CStr(Mess) + vbCrLf + "Количество файлов: " + CStr(nFiles))
End If
Sub AllFolders(inDir, inMaska) ' ---------------------------------------------
' Wscript.Echo inDir
On Error Resume Next
Set F = FSO.GetFolder(inDir)
If Err.Number = 0 Then
Set SubF = F.SubFolders
For Each Folder In SubF
' Wscript.Echo Folder.Name
Mess = Mess + SizeFilesDir(inDir + "" + Folder.Name, inMaska)
Call AllFolders(inDir + "" + Folder.Name, inMaska)
Next
End If
End Sub
Function SizeFilesDir(iDir, iMaska) ' ---------------------------------------------
' Подсчет длины файлов в директории по маске
' iDir - ' Имя директории (без \ на конце)
' iMaska - ' Маска файлов (например "*.exe")
iSize = 0
On Error Resume Next
Set Tdir = FSO.GetFolder(iDir)
If Err.Number = 0 Then
Set AllFiles = Tdir.Files
' Set RE = CreateObject("VBscript.RegExp") ' Так Тоже можно
Set Re = New RegExp
Re.Pattern = iMaska
Re.MultiLine = False
Re.Global = True
Re.IgnoreCase = True
For Each iFile In AllFiles
If Re.Test(iFile.Name) Then
iSize=iSize+iFile.Size
nFiles=nFiles+1
End If
Next
End If
SizeFilesDir = iSize
End Function
Re.Pattern = iMaska
Re.MultiLine = False
Re.Global = True
Re.IgnoreCase = True
On Error Resume Next
SubF
Maska = "^.*\." + Argum(1) + "$"
If Err.Number = 0 Then
Можно попробовать как-то задействовать Dir, но пока не готов заняться.
' ---------------------------------------------------------------------------
' Скрипт подсчитывает суммарный размер файлов по маске в папке и подпапках
' Вызов скрипта, например:
' SumSizeFile.vbs "F:" "XLS"
' SumSizeFile.vbs "C:\Program Files" "Exe"
' При наличии пробелов аргумент обязательно взять в кавычки
' ---------------------------------------------------------------------------
Set Argum = WScript.Arguments
If Argum.Count <2 Then ' Если при вызове скрипта кол-во аргументов <2 ничего не делаем
a = MsgBox("Скрипт запущен без аргументов")
Else
iiiDir = Argum(0) ' Директория (берём из аргумента)
Maska = "^.*\." + Argum(1) + "$" ' Формируем строку для регулярного выражение для маски файла (из аргумента)
' ---------------------------------------------
Set FSO = CreateObject("Scripting.FileSystemObject") ' Создаём объект для доступа к файловой системе
nFiles=0 ' Начальное значение кол-ва файлов
Mess = SizeFilesDir(iiiDir, Maska)
' Подсчитываем файлы и их длину в корне указанной директории
Call AllFolders(iiiDir, Maska) ' Подсчитываем файлы и их длину во всех поддиректориях
a = MsgBox("Директория: " + iiiDir + vbCrLf + "Маска: " + Maska + vbCrLf + "Суммарный размер файлов: " + CStr(Mess) + vbCrLf + "Количество файлов: " + CStr(nFiles))
End If
Sub AllFolders(inDir, inMaska) ' ---------------------------------------------
' Процедура рекурентно подсчитывает файлы и их длину в директории и поддиректориях
' inDir - путь директории
' inMaska - регулярное выражение с маской файлов
' Wscript.Echo inDir
On Error Resume Next
Set F = FSO.GetFolder(inDir) ' Создаём объект для доступа к директории
If Err.Number = 0 Then
Set SubF = F.SubFolders ' Создаём коллекцию поддиректорий в указ директории
For Each Folder In SubF ' Просматриваем каждый элемент коллекции (все директории)
' Wscript.Echo Folder.Name
Mess = Mess + SizeFilesDir(inDir + "" + Folder.Name, inMaska) ' Насуммируем число файлов и их длину
Call AllFolders(inDir + "" + Folder.Name, inMaska) ' Рекурентно Просматриваем каждый элемент коллекции (все директории)
Next
End If
End Sub
Function SizeFilesDir(iDir, iMaska) ' ---------------------------------------------
' Подсчет длины файлов в директории по маске
' iDir - ' Имя директории (без \ на конце)
' iMaska - ' Маска файлов (например "*.exe")
iSize = 0
On Error Resume Next
Set Tdir = FSO.GetFolder(iDir) ' Создаём объект для доступа к текущей директории
If Err.Number = 0 Then
Set AllFiles = Tdir.Files ' Для текущей директории создаём коллекцию файлов
' Set RE = CreateObject("VBscript.RegExp") ' Так Тоже можно
Set Re = New RegExp ' Создаём экземпляр регулярного выражения
Re.Pattern = iMaska ' Задаём маску
Re.MultiLine = False ' Текст однострочный
Re.Global = True ' будем проходить всю строку
Re.IgnoreCase = True ' игнорируем регистр символов
For Each iFile In AllFiles ' Просматриваем файлы в директории
If Re.Test(iFile.Name) Then ' Проверяем имя файла на соответствие рег выражению
iSize=iSize+iFile.Size ' Насуммируем размеры файлов
nFiles=nFiles+1 ' Насуммируем кол-во файлов
End If
Next
End If
SizeFilesDir = iSize
End Function
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.