VBScript 輸出:格式化為列(資料長度可能不同)

VBScript 輸出:格式化為列(資料長度可能不同)

我想要一個批次檔來查詢服務清單(DisplayName、State、StartMode),但在 txt 檔案中查看時將它們輸出為良好的格式。

這是我必須將其轉儲到 .csv 文件的內容,但我想將其放在 txt 文件中,該文件將包含其他信息,並且無法使用 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

Windows\System32\wbem您也可以使用和中的各種 XSL 檔案Windows\System32\wbem\en-US(或您的 Windows 副本使用的任何語言程式碼)來格式化沃米克以多種方式輸出。

例如,這將為您提供一個格式良好的 HTML 表格:

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

如果你因為某些原因必須使用 VBScript,你可以簡單地修改wscript.echo語句以您想要的任何格式輸出,然後重新導向到文字文件,或者更好的是讓腳本本身直接寫入文字檔案。

答案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,則「編輯」可以具有自訂製表符寬度。

相關內容