报告计算机描述或不使用 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
将实现相同的目标。
我正在制作一个脚本来检测 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
将实现相同的目标。