Вывод VBScript: форматирование в столбец (данные могут различаться по длине)

Вывод VBScript: форматирование в столбец (данные могут различаться по длине)

Мне бы хотелось иметь пакетный файл, который будет запрашивать список служб (DisplayName,State,StartMode), но при этом выводить их в удобном для просмотра текстовом файле.

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

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service WHERE DisplayName LIKE 'CommVault%'")
wscript.echo chr(34) & "Service Name" & chr(34) & "," & chr(34) & "Status" & chr(34) & "," & chr(34) & "Start Mode" & chr(34)
For Each objService in colListOfServices
    wscript.echo chr(34) & objService.DisplayName & chr(34) & "," & chr(34) & objService.State & chr(34) & "," & chr(34) & objService.StartMode & chr(34)
Next

решение1

Это даст вам красиво отформатированную текстовую таблицу:

wmic /output:Services.txt service where "DisplayName like 'CommVault%'" get DisplayName,State,StartMode

Вы также можете использовать различные файлы XSL в Windows\System32\wbemи Windows\System32\wbem\en-US(или любой другой языковой код, используемый вашей копией Windows) для форматированияwmicвывод различными способами.

Например, это даст вам красиво отформатированную HTML-таблицу:

wmic /output:Services.htm service where "DisplayName like 'CommVault%'" get DisplayName,State,StartMode /format:"%windir%\System32\wbem\en-US\htable.xsl"

Если по какой-то причине вам необходимо использовать VBScript, вы можете просто изменитьwscript.эхооператоры для вывода в любом желаемом формате, а затем перенаправьте в текстовый файл или, что еще лучше, заставьте сам скрипт записывать данные непосредственно в текстовый файл.

решение2

Назовите это MyServiceViewer.hta.

<html>
<head>
<style>
BODY        {font-size :100%;font-family: Arial, Helvetica, sans-serif;color: black;
        background:URL(images/watermark.gif);background-color: white;
        margin-top:0; margin-left:0pt; margin-right:0pt ; text-align:Justify}
P       {margin-left:40pt;margin-right:10pt}
TABLE       {font-size: 90%; text-align:left; margin-left:40pt;margin-right:10pt;background-color:lavender;width:90%}
THEAD       {color: white;font-weight:bold;background-color:darkblue; margin-left:40pt;margin-right:10pt}
TD      {Vertical-Align:Top;padding:3px}
</style>
</head>
<body>
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
    ID=dsoMacro5 WIDTH=0 HEIGHT=0>
    <PARAM NAME="DataURL" VALUE="Services.txt">
    <PARAM NAME="UseHeader" Value="True">
    <PARAM NAME="FieldDelim" VALUE=",">
    <PARAM NAME="Sort"  Value="Service Name">
</OBJECT>
<h3>My Services Database</h3>
<h4>Select a button to filter list</h4>
<p>To search for a word in the Title field use <i>* word *</i>. To search for the first word in a field use <i>Word *</i> or the last word use <i>* word</i>. To search for a string within a word or word use <i>*partialword*</i>. Searches are case sensitive.</i></p>
<p><INPUT Name=tb1 TYPE=Text Value=""> <INPUT ID=cmdNavFirst TYPE=BUTTON VALUE="     Search     " onclick="dsoMacro5.object.filter='Service Name=' + tb1.value;dsoMacro5.reset()"></p>
<p><INPUT ID=cmdNavFirst TYPE=BUTTON VALUE="   Sort Status   " onclick="dsoMacro5.object.sort='Status';dsoMacro5.reset()"></p>
<hr class="body">
<TABLE ID=tblMacro2 DATASRC=#dsoMacro5 OnRowEnter=Alert(tblMacro2.row)>
<THEAD>
<TR>
<TD WIDTH="60%"><b>Service Name</b></TD>
<TD WIDTH="20%"><b>Status</b></TD>
<TD WIDTH="20%"><b>Start Mode</b></TD>
</TR>
</THEAD>
<TBODY>
<TR>
<TD WIDTH="20%"><SPAN DATAFLD="Service Name"></SPAN></TD>
<TD WIDTH="60%"><SPAN DATAFLD="Status"></SPAN></TD>
<TD WIDTH="20%"><SPAN DATAFLD="Start Mode"></SPAN></TD>
</TR>
</TBODY>
</TABLE>
</body>
</html>

И назовите этот файл services.txt

Service Name,Status,Start Mode
Workstation,Ok,Manual
Workstation,Ok,Manual
Workstation,Ok,Manual
Workstation,Ok,Manual
Server,Ok,Manual
Server,Ok,Manual
Server,Ok,Manual
Server,Ok,Manual
BFE,Ok,Auto
BFE,Ok,Auto
BFE,Ok,Auto

На ваш конкретный вопрос это не будет работать на шрифтах переменной ширины, vbs + блокнот. Если вы измените на шрифт фиксированной ширины в блокноте ...

Для заполнения 20 фиксированными символами

A="Running"

MsgBox A & Space(20 - Len(A)) & "|end of marker so you can see spaces in msgbox"

Часто простое размещение табуляции между столбцами также будет работать на 95%, 100%, если данные одинаковой или почти одинаковой длины. Опять же, установив больше стандартных табуляции в просмотрщике (но не в блокноте), можно сделать это. Я обычно использую Word, но если у вас 32-битная версия Windows, Edit может иметь пользовательскую ширину табуляции.

Связанный контент