Mat*_*nde 2 wmi batch-file wmi-query wmic
我正在尝试使用WMIC删除旧打印服务器上的旧打印机
如果我从命令行使用以下语法,它的工作原理
WMIC PRINTER WHERE"SERVERNAME LIKE'%% OLDSERVERNAME %%'"DELETE
我被问到是否可以让它更换打印机或更新它们以免帮助台获得"如何添加我的打印机"电话
我尝试使用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%
Run Code Online (Sandbox Code Playgroud)
所以你会认为你得到的所有值都包含在一个很好的变量中,你可以根据自己的意愿去做,但是没有,我开启了回声,看起来这个变量一旦被捕获就会被设置回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.
Run Code Online (Sandbox Code Playgroud)
我会喜欢一些关于为什么它似乎倾销字符串的想法.
Powershell和VBScript也不是不可选择的,我对两者都很熟悉,这似乎有可能,而且我真的不想重新开始.
WMIC返回两行,一行是printername,另一行是空行.
解决方法是测试空行.
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%
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19997 次 |
最近记录: |