prnmngr.vbs - 从 windows 批处理文件中将输出解析并格式化为 csv?
prnmngr.vbs - parse and format output as csv from a windows batch file?
@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
请推荐
@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 然后如果第一个标记是 not Comment
,看看第二个是否是 name
并将名为 %%a
的变量设置为 name
、%%c
.
之后行剩余部分的值
当第一个token为Comment
,则输出检测到的名称,并清除变量,为下一个数据块做准备。
@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
请推荐
@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 然后如果第一个标记是 not Comment
,看看第二个是否是 name
并将名为 %%a
的变量设置为 name
、%%c
.
当第一个token为Comment
,则输出检测到的名称,并清除变量,为下一个数据块做准备。