Saída VBScript: formatação para uma coluna (os dados podem variar em comprimento)

Saída VBScript: formatação para uma coluna (os dados podem variar em comprimento)

Eu gostaria de ter um arquivo em lote que consultasse uma lista de serviços (DisplayName, State, StartMode), mas que eles fossem gerados em um formato bem formatado ao observá-lo em um arquivo txt.

Aqui está o que eu tenho que despejar em um arquivo .csv, mas quero tê-lo em um arquivo txt que terá outras informações e não será viável usar o Excel (normalmente usando o bloco de notas para abrir este arquivo e quero mantê-lo Por aqui).

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

Responder1

Isso lhe dará uma tabela de texto bem formatada:

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

Você também pode usar os vários arquivos XSL em Windows\System32\wbeme Windows\System32\wbem\en-US(ou qualquer código de idioma que sua cópia do Windows usa) para formatar owmicsaída de várias maneiras.

Por exemplo, isso lhe dará uma tabela HTML bem formatada:

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

Se por algum motivo você precisar usar VBScript, você pode simplesmente modificar owscript.echoinstruções para saída em qualquer formato desejado e, em seguida, redirecione para um arquivo de texto ou, melhor ainda, faça o próprio script gravar diretamente em um arquivo de texto.

Responder2

Chame isso de 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>

E chame esse arquivo de 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

Para sua pergunta específica, não funcionará em fontes de largura variável, vbs + bloco de notas. Se você mudar para uma fonte de largura fixa no bloco de notas...

Para preencher 20 caracteres de largura fixa

A="Running"

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

Muitas vezes, apenas colocar tabulações entre colunas também funcionará 95%, 100% se os dados tiverem o mesmo comprimento ou quase o mesmo. Novamente, definir guias maiores que o padrão em um visualizador (mas não no bloco de notas) pode fazer isso funcionar. Eu normalmente uso o Word, mas se você estiver em janelas de 32 bits, o Edit poderá ter larguras de guia personalizadas.

informação relacionada