我被要求编写一个程序,询问网络中的所有打印机有关名称,位置和CMYK碳粉的情况(还剩多少百分比)。因此,我从OID开始,仅对一台打印机尝试过。这工作了。然后,我编写了一个.bat文件,其中包含所有必须执行的查询。我为所有97台打印机制作了一个阵列。因为我会在代码行中使用数组,所以没有任何效果。我认为代码行不接受该数组。我搜索了所有内容并尝试了所有内容,但没有任何效果,因此我想问您我的问题是什么。我也想将其写成.txt文件。
我的代码:
{{1}}
图片显示了启动.bat文件时出现的错误消息。
答案 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选项仅打印值。