【发布时间】:2012-10-18 22:18:41
【问题描述】:
我正在尝试使用 WMIC 删除我们旧打印服务器上的一些旧打印机
如果我在命令行中使用下面的语法,它就可以工作
WMIC 打印机将“SERVERNAME LIKE '%%OLDSERVERNAME%%'”删除
有人问我是否可以让它替换打印机或更新它们,以免帮助台收到“如何添加我的打印机”电话
我尝试使用 SET 进行一些变体来设置 SERVERNAME 的属性,它似乎正在处理,但没有任何变化,并且执行 GET 仍然显示旧值。
所以我想我可以做一个 FOR /F 循环,将打印机的名称 (sharename) 包装在一个变量中,然后在删除有问题的打印机后使用另一个命令重新创建打印机。
这是我的脚本
@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%
所以你会认为你会得到一个很好的变量中的值,但不,我打开了回显,看起来变量一旦被捕获就会被设置回 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 语句放在 FOR 循环中只会给 %%A 打印机的值 - 它无法设置它,因为您的 WMIC 命令正在执行 GET,而不是 SET。如果没有 FOR 循环,请尝试执行相同的 WMIC 命令,但将 GET 替换为 SET。但是,核心问题是您要更新打印驱动程序和名称,这需要比您这里更多的脚本。
-
@Lizz - 在这种情况下,Set 不是 WMIC 命令,它是用于设置环境变量的内部命令处理器命令。如果您查看他的输出,您会看到 4 个已执行的命令,而预期只有两个。具体来说,您会看到变量
PRINTERNAME设置为 nameofprinter,然后设置为空,然后在没有数据的情况下调用命令ECHO,然后您会看到一个空的ECHO命令的结果,它是“ECHO 开启。”,因为他没有打开ECHO OFF,因为他正在调试。唯一可能的结果是ECHO is off.,但前提是他之前设置了@echo off命令。
标签: batch-file wmi wmi-query wmic