Отчет об использовании дискового пространства

We use cookies. Read the Privacy and Cookie Policy

Отчет об использовании дискового пространства

Напишем сценарий DrivesReport.js, который будет создавать таблицу использования дискового пространства для дисков всех типов (съемных, жестких и сетевых), имеющихся на компьютере, в следующем формате:

Диск: буква_диска  Метка тома: метка  Общий объем, Mb: n1  Используется, Mb: n2  Свободно, Mb: n3 

Для этого в сценарии вывод информации производится в текстовый файл rep.txt (переменная RepFile), который затем открывается с помощью Блокнота (рис. 5.8):

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Запускаем Блокнот (notepad.exe) и открываем в нем файл rep.txt

WshShell.Run("notepad.exe rep.txt"); 

Данные об одном диске формируются в функции WriteDriveInfo(drive), где в качестве параметра drive подставляется объект Drive для нужного диска. Соответствующие объекты Drive для всех дисков, имеющихся в системе, создаются в функции LoopDrives():

// Функция для перебора в цикле всех устройств (дисков)

function LoopDrives() {

 var Drives;

 //Создаем коллекцию дисков

 Drives = new Enumerator( FSO.Drives );

 //Цикл по всем дискам

 for(; !Drives.atEnd(); Drives.moveNext()) WriteDriveInfo(Drives.item());

}

Рис. 5.8. Сформированный отчет об использовании дискового пространства

В функции WriteDriveInfo(drive) сначала проверяется готовность устройства drive — если свойство IsReady объекта Drive равно true, то для этого устройства определяются общий объем (свойство TotalSize), объем свободного пространства (свойство FreeSpace), буква диска (свойство DriveLetter) и метка тома (свойство FreeSpace):

//Вычисляем общий объем диска в мегабайтах

Total = Math.round(drive.TotalSize/1048576);

//Вычисляем объем свободного пространства в мегабайтах

Free = Math.round(drive.FreeSpace/1048576);

//Вычисляем объем использованного пространства в мегабайтах

Used = Total - Free;

//Определяем букву диска

DriveLetter=drive.DriveLetter+":";

//Определяем метку тома

VolumeName=drive.VolumeName;

Строки с полученными значениями затем приводятся к нужному виду с помощью вспомогательных функций LFillStr (выравнивание строки влево), FillStr (выравнивание строки по центру) и записываются в выходной файл RepFile:

RepFile.WriteLine("+---------------------------------------------------+");

//Записываем информацию о букве диска

s="|"+FillStr(51,"Диск "+DriveLetter)+"|";

RepFile.WriteLine(s);

RepFile.WriteLine("+---------------------------------------------------+");

//Записываем информацию о метке тома

s="|"+LFillStr(25,"Метка тома: "+VolumeName)+"|";

//Записываем информацию об общем объеме диска

s+=LFillStr(25,"Общий объем, Mb: "+Total)+"|";

RepFile.WriteLine(s);

RepFile.WriteLine("+---------------------------------------------------+");

//Записываем информацию об использованном пространстве

s="|"+LFillStr(25,"Используется, Mb: "+Used.toString())+"|";

//Записываем информацию о свободном пространстве

s+=LFillStr(25,"Свободно, Mb: "+Free.toString())+"|";

RepFile.WriteLine(s);

RepFile.WriteLine("+---------------------------------------------------+");

Если же устройство drive не готово (свойство IsReady равно false), то с помощью свойства DriveType проверяется, не является ли ли диск сетевым (в этом случае DriveType=3), после чего в файл выводится соответствующее сообщение:

if (drive.DriveType == 3) { //Проверяем, является ли диск сетевым

 //Записываем информацию о букве диска

 RepFile.WriteLine( "Диск " + drive.DriveLetter + " является сетевым" );

 //Записываем пустые строки

 RepFile.WriteLine();

 RepFile.WriteLine();

} else {

 //Устройство не готово

 RepFile.WriteLine( "Устройство " + drive.DriveLetter + ": не готово" );

 //Записываем пустые строки

 RepFile.WriteLine();

 RepFile.WriteLine();

}

Полный текст сценария DrivesReport.js приведен в листинге 5.16.

Листинг 5.16. Отчет об использовании дискового пространства для всех устройств на компьютере

/*******************************************************************/

/* Имя: DrivesReport.js                                            */

/* Язык: JScript                                                   */

/* Описание: Формирование отчета об использовании дискового        */

/*           пространства для всех устройств на компьютере         */

/*******************************************************************/

//Объявляем переменные

var FSO, RepFile, MDate,WshShell, ForWriting = 2;

// Функция для перебора в цикле всех устройств (дисков)

function LoopDrives() {

 var Drives;

 //Создаем коллекцию дисков

 Drives = new Enumerator( FSO.Drives );

 //Цикл по всем дискам

 for(; !Drives.atEnd(); Drives.moveNext()) WriteDriveInfo(Drives.item());

}

// Функция для вывода информации об одном устройстве (диске)

function WriteDriveInfo(drive) {

 var s,Total,Free,Used,DriveLetter,VolumeName;

 if (drive.IsReady) { //Проверяем готовность устройства

  //Вычисляем общий объем диска в мегабайтах

  Total = Math.round(drive.TotalSize/1048576);

  //Вычисляем объем свободного пространства в мегабайтах

  Free = Math.round(drive.FreeSpace/1048576);

  //Вычисляем объем использованного пространства в мегабайтах

  Used = Total - Free;

  //Определяем букву диска

  DriveLetter=drive.DriveLetter+":";

  //Определяем метку тома

  VolumeName=drive.VolumeName;

  RepFile.WriteLine("+---------------------------------------------------+");

  //Записываем информацию о букве диска

  s="|"+FillStr(51,"Диск "+DriveLetter)+"|";

  RepFile.WriteLine(s);

  RepFile.WriteLine("+---------------------------------------------------+");

  //Записываем информацию о метке тома

  s="|"+LFillStr(25,"Метка тома: "+VolumeName)+"|";

  //Записываем информацию об общем объеме диска

  s+=LFillStr(25,"Общий объем, Mb: "+Total)+"|";

  RepFile.WriteLine(s);

  RepFile.WriteLine("+---------------------------------------------------+");

  //Записываем информацию об использованном пространстве

  s="|"+LFillStr(25,"Используется, Mb: "+Used.toString())+"|";

  //Записываем информацию о свободном пространстве

  s+=LFillStr(25,"Свободно, Mb: "+Free.toString())+"|";

  RepFile.WriteLine(s);

  RepFile.WriteLine("+---------------------------------------------------+");

  //Записываем пустые строки

  RepFile.WriteLine();

  RepFile.WriteLine();

 } else if (drive.DriveType == 3) { //Проверяем, является ли диск сетевым

  //Записываем информацию о букве диска

  RepFile.WriteLine( "Диск " + drive.DriveLetter + " является сетевым" );

  //Записываем пустые строки

  RepFile.WriteLine();

  RepFile.WriteLine();

 } else {

  //Устройство не готово

  RepFile.WriteLine( "Устройство " + drive.DriveLetter + ": не готово" );

  //Записываем пустые строки

  RepFile.WriteLine();

  RepFile.WriteLine();

 }

}

/*******************  Начало  **********************************/

//Создаем объект FileSystemObject

FSO = WScript.CreateObject("Scripting.FileSystemObject");

//Открываем файл rep.txt

RepFile = FSO.OpenTextFile("rep.txt", ForWriting, true);

//Определяем текущую дату и время

MDate = new Date();

//Записываем дату и время в отчет

RepFile.WriteLine("Дата отчета: " + MDate);

RepFile.WriteLine();

//Вызываем функцию LoopDrives

LoopDrives();

//Закрываем файл rep.txt

RepFile.Close();

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Запускаем Блокнот (notepad.exe) и открываем в нем файл rep.txt

WshShell.Run("notepad.exe rep.txt");

/*************  Конец *********************************************/

// Вспомогательные функции 

//Выравнивание строки s вправо в поле длиной l символов

function RFillStr(l,s) { 

 var ss,i,ll;

 ll=l-s.length;

 if (s.length>=l) {

  return(s);

 } else {

  ss=s;

  for (i=1;i<=ll;i++) {

   ss=" "+ss;

  }

  return(ss);

 }

}

//Выравнивание строки s влево в поле длиной l символов

function LFillStr(l,s) {

 var ss,i,ll;

 ll=l-s.length;

 if (s.length>=l) {

  return(s);

 } else {

  ss=s;

  for (i=1;i<=ll;i++) {

   ss=ss+" ";

  }

  return(ss);

 }

}

//Выравнивание строки s по центру в поле длиной l символов

function FillStr(l,s) {

 var ss,i,ll,s1,l2;

 ll=l-s.length;

 if (s.length>=l) {

  return(s);

 } else {

  ss=s;

  l2=Math.round((l-s.length)/2);

  ss=LFillStr(s.length+l2,s);

  ss=RFillStr(l,ss);

  return(ss);

 }

}