Как сделать колонки в VBscript исправленными - PullRequest
1 голос
/ 28 апреля 2009

Я новичок в VBscript, и у меня есть скрипт, который определяет использование дискового пространства локальными дисками. Однако, когда некоторые столбцы содержат длинное числовое значение, некоторые смежные столбцы и даже значения перемещаются вправо, что приводит к дезорганизации вывода. Я уже

Пожалуйста, смотрите ниже содержание скрипта:

Option Explicit

const strComputer = "."
const strReport = "F:\dba_scripts\diskspace.txt"


Dim objWMIService, objItem, colItems
Dim strDriveType, strDiskSize, txt

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk WHERE DriveType=3")
txt = "DRIVE" & vbtab & vbtab & "SIZE" & vbtab & vbtab & "USED" & vbtab & vbtab & "FREE" & vbtab & vbtab & "FREE(%)" & vbcrlf
For Each objItem in colItems

    DIM pctFreeSpace,strFreeSpace,strusedSpace

    pctFreeSpace = INT((objItem.FreeSpace / objItem.Size) * 1000)/10
    strDiskSize = round((objItem.Size /1073741824),1) & " GB"
    strFreeSpace = round((objItem.FreeSpace /1073741824),1) & " GB"
    strUsedSpace = round(((objItem.Size-objItem.FreeSpace)/1073741824),1) & " GB"
    txt = txt & objItem.Name & vbtab & vbtab & strDiskSize & vbtab & vbtab & strUsedSpace & vbTab & vbtab & strFreeSpace & vbtab & vbtab & pctFreeSpace & vbcrlf

Next

writeTextFile txt,strReport
wscript.echo "Report written to " & strReport & vbcrlf & vbcrlf & txt

' Procedure to write output to a text file
private sub writeTextFile(byval txt,byval strTextFilePath)
    Dim objFSO,objTextFile

    set objFSO = createobject("Scripting.FileSystemObject")

    set objTextFile = objFSO.CreateTextFile(strTextFilePath)

    objTextFile.Write(txt)

    objTextFile.Close
    SET objTextFile = nothing
end sub

Выходной файл выглядит нормально, но когда я отправляю / отправляю его по электронной почте, используя бесплатный bmail, результаты дезорганизуются (то есть некоторые столбцы и значения перемещаются вправо.

Мой вопрос: есть ли способы сделать результаты столбцов и значений фиксированными (то есть столбцы и значения не перемещаются вправо)?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2009
Function RightJustified(ColumnValue, ColumnWidth)
   RightJustified = Space(ColumnWidth - Len(ColumnValue)) & ColumnValue
End Function

Пример использования:

output = output & _
         RightJustified(strDiskSize, 15) & _
         RightJustified(strUsedSpace, 15) & _
         RightJustified(strFreeSpace, 15) & _
         RightJustified(pctFreeSpace, 15) & _
         vbCrLf

EDIT

Добавьте функцию RightJustified к вашему сценарию.

Затем замените эту строку своего кода:

txt = txt & objItem.Name & vbtab & vbtab & strDiskSize & vbtab & vbtab & strUsedSpace & vbTab & vbtab & strFreeSpace & vbtab & vbtab & pctFreeSpace & vbcrlf

с:

txt = txt & objItem.Name & _
      RightJustified(strDiskSize, 15) & _
      RightJustified(strUsedSpace, 15) & _
      RightJustified(strFreeSpace, 15) & _
      RightJustified(pctFreeSpace, 15) & _
      vbCrLf

РЕДАКТИРОВАТЬ 2

Я добавил функцию RightJustified в нижней части вашего сценария, а затем вызвал ее в цикле для форматирования столбцов. Я также использовал его в заголовках столбцов. Ниже приведен скрипт, а внизу вывод на моей машине.

Option Explicit

const strComputer = "."
const strReport = "F:\dba_scripts\diskspace.txt"


Dim objWMIService, objItem, colItems
Dim strDriveType, strDiskSize, txt

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk WHERE DriveType=3")

txt = RightJustified("DRIVE", 10) & _
      RightJustified("SIZE", 15) & _
      RightJustified("USED", 15) & _
      RightJustified("FREE", 15) & _
      RightJustified("FREE(%)", 15) & _
      vbCrLf

For Each objItem in colItems

    DIM pctFreeSpace,strFreeSpace,strusedSpace

    pctFreeSpace = INT((objItem.FreeSpace / objItem.Size) * 1000)/10
    strDiskSize = round((objItem.Size /1073741824),1) & " GB"
    strFreeSpace = round((objItem.FreeSpace /1073741824),1) & " GB"
    strUsedSpace = round(((objItem.Size-objItem.FreeSpace)/1073741824),1) & " GB"

    txt = txt & _
      RightJustified(objItem.Name, 10) & _
      RightJustified(strDiskSize, 15) & _
      RightJustified(strUsedSpace, 15) & _
      RightJustified(strFreeSpace, 15) & _
      RightJustified(pctFreeSpace, 15) & _
      vbCrLf
Next

writeTextFile txt,strReport
wscript.echo "Report written to " & strReport & vbcrlf & vbcrlf & txt

' Procedure to write output to a text file
Sub writeTextFile(byval txt,byval strTextFilePath)
    Dim objFSO,objTextFile
    set objFSO = createobject("Scripting.FileSystemObject")
    set objTextFile = objFSO.CreateTextFile(strTextFilePath)
    objTextFile.Write(txt)
    objTextFile.Close
    Set objTextFile = nothing
End Sub

Function RightJustified(ColumnValue, ColumnWidth)
   RightJustified = Space(ColumnWidth - Len(ColumnValue)) & ColumnValue
End Function

Выпущено продукции:

 DRIVE           SIZE           USED           FREE        FREE(%)
    C:        48.4 GB        40.6 GB         7.8 GB           16.1
    D:       100.6 GB        56.8 GB        43.8 GB           43.5
1 голос
/ 28 апреля 2009

Вы можете написать таблицу, используя HTML. Это должно работать в электронном письме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...