saída do VBScript: formatando para uma coluna (os dados podem variar em tamanho)

0

Eu gostaria de ter um arquivo em lote que consultaria uma lista de serviços (DisplayName, State, StartMode), mas os deixaria em um formato bem formatado quando examinado em um arquivo txt.

Aqui está o que eu tenho para despejar para um arquivo .csv, mas eu 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 deseja para mantê-lo assim.

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
    
por BondUniverse 06.05.2015 / 18:50

2 respostas

0

Isso fornecerá 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\wbem e Windows\System32\wbem\en-US (ou qualquer código de idioma usado pela sua cópia do Windows) para formatar a saída wmic de várias maneiras.

Por exemplo, isso fornecerá 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 o VBScript, você pode simplesmente modificar as instruções wscript.echo para produzir no formato que quiser, então redirecionar para um arquivo de texto ou melhor ainda fazer o próprio script escrever para um arquivo de texto diretamente.

    
por 07.05.2015 / 20:14
0

Ligue para este 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 este arquivo 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, ele não funcionará em fontes de largura variável, vbs + notepad. 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"

Normalmente, colocar guias entre colunas também funcionará 95%, 100% se os dados forem iguais ou quase do mesmo tamanho. Novamente, definindo guias maiores que as padrão em um visualizador (mas não no bloco de notas) pode fazer isso funcionar. Eu costumo usar o Word, mas se você estiver em janelas de 32 bits, o Edit pode ter larguras de guias personalizadas.

    
por 07.05.2015 / 01:41