我正在尝试使用WMIC删除旧版打印服务器上的一些旧版打印机

如果我从命令行使用以下语法,则可以正常工作

WMIC打印机在“SERVERNAME之类的'%% OLDSERVERNAME %%'”中删除

我被问到是否可以更换打印机或对其进行更新,以免于服务台收到“如何添加打印机”电话

我用SET尝试了一些变体来设置SERVERNAME的属性,该属性似乎可以处理,但是没有任何变化,执行GET仍显示旧值。

所以我想我可以执行FOR / F循环,将打印机的名称(共享名)包装在变量中,然后在删除有问题的打印机之后,使用另一个命令重新创建打印机。

这是我的剧本

@ECHO

ECHO Gathering Installed Printer Information...

FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A

ECHO %PRINTERNAME%

所以您会认为可以将值全部包装在一个不错的变量中以进行处理,但是没有,我打开了echo,似乎变量在被捕获后立即被设置回null。

我的输出看起来像这样...
FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A

SET PRINTERNAME=nameofprinter

SET PRINTERNAME=

ECHO

ECHO is on.

很想知道为什么它似乎会丢弃字符串。

Powershell和VBScript也不是没有选择,我都熟悉,这似乎是可能的,而且我真的不想从头开始。

最佳答案

WMIC返回两行,其中一行具有打印机名称,另一行为空。
解决方案是测试空行。

ECHO Gathering Installed Printer Information...
FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO if not "%%A"=="" SET PRINTERNAME=%%A
ECHO %PRINTERNAME%

关于batch-file - 批量WMIC重定向输出并将其包装为变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12964631/

10-11 09:26