@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
请建议
答案 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
时,输出已检测到的名称并清除为下一个数据块准备好的变量。