prnmngr.vbs - 从Windows批处理文件解析并格式化输出为csv?

时间:2018-01-03 12:37:38

标签: windows batch-file wsh

@ECHO OFF
setlocal enabledelayedexpansion
for /f "tokens=*" %%f in ('Cscript %WINDIR%\\System32\\Printing_Admin_Scripts\\en-US\\Prnmngr.vbs -l -s myserver1.com') do (
  echo %%f
)
pause

输出如下:

Server name myserver1.com
Printer name myprinter1
Share name myprinter1
Driver name SHARP UD2 PCL6
Port name myprinter1.com
Comment
Location
Print processor winprint
Data type RAW
Parameters
Attributes 584
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle
Extended printer status Unknown
Detected error state Unknown
Extended detected error state Unknown
100个打印机的

等等

csv文件中预期的输出是服务器名称打印机名称 共享名称驱动程序名称端口名称,如下所示:

myserver1.com,myprinter1,myprinter1,SHARP UD2 PCL6,myprinter1.com
myserver2.com,myprinter2,myprinter2,hp  PCL6,myprinter2.com
myserver3.com,myprinter3,myprinter3,hp universal PCL5,myprinter3.com

请建议

1 个答案:

答案 0 :(得分:2)

@ECHO OFF
setlocal enabledelayedexpansion
CALL :zapvars

:: for /f "tokens=*" %%f in ('Cscript %WINDIR%\\System32\\Printing_Admin_Scripts\\en-US\\Prnmngr.vbs -l -s myserver1.com') do (
for /f "tokens=*" %%f in (q48077575.txt) do (
 FOR /f "tokens=1,2*delims= " %%a IN ("%%f") DO IF "%%a"=="Comment" (
  CALL :report
 ) ELSE IF "%%b"=="name" SET "%%a=%%c"
 )
)

GOTO :EOF

:: report - use drop-through to zap variables used
:report
ECHO %server%,%printer%,%share%,%driver%,%port%

:: clear variables used
:zapvars
FOR %%z IN (server printer share driver port) DO SET "%%z="
GOTO :eof

我使用了一个名为q48077575.txt的文件,其中包含我的测试数据,并辅以一些类似的数据。

请注意最初调用zapvars以清除使用的变量。

您已经阅读了%%f的每一行。使用空格作为分隔符将每一行标记为%% a,%% b,%% c,然后如果第一个标记 Comment,请查看第二个标记是否为name和将名为%%a的变量设置为name%%c之后的剩余行的值。

当第一个标记 Comment时,输出已检测到的名称并清除为下一个数据块准备好的变量。