VBScript-Ausgabe: Formatierung einer Spalte (Daten können unterschiedlich lang sein)

VBScript-Ausgabe: Formatierung einer Spalte (Daten können unterschiedlich lang sein)

Ich hätte gerne eine Batchdatei, die eine Liste von Diensten (Anzeigename, Status, Startmodus) abfragt, diese aber in einem gut formatierten Format ausgibt, wenn man sie in einer TXT-Datei betrachtet.

Folgendes muss ich in eine CSV-Datei übertragen, aber ich möchte es in einer TXT-Datei haben, die andere Informationen enthält und für die die Verwendung von Excel nicht möglich ist (normalerweise öffne ich diese Datei mit dem Editor und möchte es so beibehalten).

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

Antwort1

Dadurch erhalten Sie eine schön formatierte Texttabelle:

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

Sie können auch die verschiedenen XSL-Dateien in Windows\System32\wbemund Windows\System32\wbem\en-US(oder den Sprachcode, den Ihre Windows-Kopie verwendet) verwenden, um diewmicAusgabe auf verschiedene Arten.

So erhalten Sie beispielsweise eine schön formatierte HTML-Tabelle:

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

Wenn Sie aus irgendeinem Grund VBScript verwenden müssen, können Sie einfach diewscript.echoAnweisungen zur Ausgabe in einem beliebigen Format und anschließender Weiterleitung in eine Textdatei oder, noch besser, zum direkten Schreiben in eine Textdatei durch das Skript selbst.

Antwort2

Nennen Sie dies 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>

Und nennen Sie diese Datei 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

Zu Ihrer konkreten Frage: Es funktioniert nicht mit Schriftarten mit variabler Breite, VBS + Notepad. Wenn Sie in Notepad zu einer Schriftart mit fester Breite wechseln ...

Zum Auffüllen mit 20 Zeichen fester Breite

A="Running"

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

Wenn die Daten gleich oder annähernd gleich lang sind, funktioniert es oft auch, wenn Sie einfach Tabulatoren zwischen die Spalten setzen. Dies funktioniert zu 95 % bzw. 100 %, wenn Sie einfach Tabulatoren zwischen die Spalten setzen. Auch hier können Sie dies erreichen, indem Sie in einem Viewer (aber nicht im Editor) größere als die Standard-Tabulatoren setzen. Normalerweise verwende ich Word, aber wenn Sie 32-Bit-Windows verwenden, können Sie in Edit benutzerdefinierte Tabulatorbreiten festlegen.

verwandte Informationen