通过SNMP Batch从打印机获取碳粉量

时间:2018-07-11 07:06:01

标签: arrays batch-file snmp oid

我被要求编写一个程序,询问网络中的所有打印机有关名称,位置和CMYK碳粉的情况(还剩多少百分比)。因此,我从OID开始,仅对一台打印机尝试过。这工作了。然后,我编写了一个.bat文件,其中包含所有必须执行的查询。我为所有97台打印机制作了一个阵列。因为我会在代码行中使用数组,所以没有任何效果。我认为代码行不接受该数组。我搜索了所有内容并尝试了所有内容,但没有任何效果,因此我想问您我的问题是什么。我也想将其写成.txt文件。

我的代码:

{{1}}

图片显示了启动.bat文件时出现的错误消息。

enter image description here

2 个答案:

答案 0 :(得分:1)

问题在于表达式%a[%count%]%,它被解释为变量%a[%(空)加上文字字符串count和变量%]%(也空)。

可能的解决方案是:

call snmpwalk -v2c -c public %%a[%count%]%% ...

或者您使用delayed expansion,在我看来,它更快更好:

setlocal EnableDelayedExpansion
rem ...
snmpwalk -v2c -c public !a[%count%]! ...
rem ...
endlocal

或者,为避免%扩展,请使用for循环,如下所示:

for %%C in (%count%) do (
    snmpwalk -v2c -c public !a[%%C]! ...
)

答案 1 :(得分:0)

这是您遍历数组的方式:

@echo off 
setlocal enabledelayedexpansion 

set hosts[0]=172.22.10.3
set hosts[1]=172.22.10.2
set hosts[2]=172.22.10.1
set hosts[3]=172.22.10.5

for /l %%n in (0,1,3) do ( 
   echo !hosts[%%n]! 
)

输出如下:

172.22.10.3
172.22.10.2
172.22.10.1
172.22.10.5

更新:因此,您只需将snmpwalk调用放入循环中即可,如下所示:

for /l %%n in (0,1,3) do ( 
    echo Getting data from host: !hosts[%%n]! 

    echo Printer Name
    snmpwalk -v2c -c public !hosts[%%n]! 1.3.6.1.2.1.1.5
    echo Printer Location
    snmpwalk -v2c -c public !hosts[%%n]! 1.3.6.1.2.1.1.6 
    echo Black Toner   
    snmpwalk -v2c -c public !hosts[%%n]! 1.3.6.1.2.1.43.11.1.1.9.1.4 
    echo Cyan Toner      
    snmpwalk -v2c -c public !hosts[%%n]! 1.3.6.1.2.1.43.11.1.1.9.1.1
    echo Magenta Toner
    snmpwalk -v2c -c public !hosts[%%n]! 1.3.6.1.2.1.43.11.1.1.9.1.2
    echo Yellow Toner
    snmpwalk -v2c -c public !hosts[%%n]! 1.3.6.1.2.1.43.11.1.1.9.1.3
)

重要:考虑使用snmpwalk的-Oqv选项仅打印值。