报告计算机描述或不使用 WMIC

Reporting Computer descriptions or not using WMIC

我正在制作一个脚本来检测 PC 列表中是否存在某些程序,然后报告主机名、软件列表和描述以便于定位。 一切都很好,但当发现“无”描述时,我无法整理输出。和以前一样,我会在一个整洁的列表中获得所需的信息,当没有描述时,它只是报告 ECHO 已打开。 'or' ECHO 已关闭。

这是我的代码

title Problem Software Itinary
echo.
echo List of PC Names goes here Plugins\hostnames.txt
echo.
echo Press a key to start...
pause>nul
CLS
echo.
break>Plugins\Logs\Results.txt
for /f "usebackq tokens=*" %%A in (Plugins\hostnames.txt) do (
echo ============================================= & echo =============================================>>Plugins\Logs\Results.txt
echo Scanning PC %%A... 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt
if exist "\%%A\C$\FOO" echo FOO PROG Installed 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt
if exist "\%%A\C$\FOO2" echo FOO 2 PROG Installed 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt
for /f "tokens=2 Delims==" %%B in ('WMIC /NODE:"%%A" os get description /VALUE ^| find "Description"') Do Echo %%B 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt
echo ============================================= & echo =============================================>>Plugins\Logs\Results.txt
)
start "" Plugins\Logs\Results.txt
echo.
echo Done! Press any key to return to Menu...
pause>nul
goto :audit

这是它工作的例子和回声问题:-

=============================================
=============================================
Scanning PC TESTPC1...  
FOO PROG Installed  
GP-B82047-ROOM 4  
=============================================
=============================================
Scanning PC TESTPC2...  
FOO 2 PROG Installed  
ECHO is on.
=============================================
=============================================

我更愿意回显“未找到描述”之类的内容

为了治愈它,我尝试将 desc 变量设置为 %%B(设置 desc=%%b)(在 wmic 行中)(而不是 Do Echo %%B)然后如果定义了 desc(echo desc ) ELSE(回显无可用描述)。但是,这也不起作用,同样的问题。我也试过启用延迟扩展,但没有成功。

我错过了什么 - 谢谢!!?

实际上您的脚本中已经有了部分解决方案,或者至少有一个可能的解决方案:

for /f "tokens=2 Delims==" %%B in ('WMIC /NODE:"%%A" os get description /VALUE ^| find "Description"') Do Echo %%B 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt

如果这个echo可以为空,就改成

for /f "tokens=2 Delims==" %%B in ('WMIC /NODE:"%%A" os get description /VALUE ^| find "Description"') Do Echo.%%B 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt

注意 echo 之后的 .。这将抑制来自 echo 的错误消息。

此外,请注意,通常最好为此使用 . 以外的其他字符,因为如果您在装有名为 echo 的程序的机器上不幸遇到 运行在路径中,结果可能是不可预测的。 : 很适合这个,所以:

for /f "tokens=2 Delims==" %%B in ('WMIC /NODE:"%%A" os get description /VALUE ^| find "Description"') Do Echo:%%B 2>&1 | Plugins\tee -a Plugins\Logs\Results.txt

将实现相同的目标。