我一直在尝试为我的团队创建一种更简单的方法来获取网络上设备的位锁状态。在这里和其他站点检查了一堆单独的答案后,我设法拼凑了一个几乎工作批处理脚本,但是它似乎并没有正确地提取条目。代码如下:
@echo off
color a
title BitLocker Checking
:start
cls
setlocal EnableDelayedExpansion
set i=0
for /F %%a in ('net view') do (
set line=%%a
if "!line:~0,2!" equ "\\" (
set /A i+=1
echo [!i!] !line:~2!
set comp[!i!]=!line:~2!
)
)
echo.
echo.
echo Choose a computer.
choice /c 12345678 >nul
set name=!comp[%errorlevel%]!
cls
for /f "tokens=1,2 delims=[]" %%A in ('manage-bde -status -computername %name% ^| find "Conversion Status"') do set derp=%%B
if "%name%"=="" goto start
echo The status of %name% is %derp%
echo.
echo.
echo %derp% | clip
echo. %derp% copyied to clipboard.
echo.
echo Press any key.
pause
goto start
当我单独使用manage-bde -status -computername %name% | find "Conversion Status"
行并为其提供计算机名时,似乎可以正确拉出转换状态行(例如,如果计算机上的bitlocker处于关闭状态,则为“转换状态:已完全解密”)。
但是,如果留在批处理文件的上下文中,它将输出“ computernamegoeshere的状态为”,然后输出为空白,就好像它没有将数据从“查找”命令获取到变量%B中一样。
有人有什么建议吗?自从我写了批处理命令以来已经有一段时间了,有点生锈了。
答案 0 :(得分:0)
我认为输出中多余的空格使您感到困惑。在Win10命令行上,这对我有用:
for /f "tokens=1,*" %A in ('manage-bde -status -computername %COMPUTERNAME% ^| findstr Conversion') do echo %A %B
导致输出(减去提示噪音):
Conversion Status: Fully Decrypted
Conversion Status: Fully Decrypted
Conversion Status: Fully Decrypted
因此,您需要删除delims=[]
,将tokens=1,2
更改为tokens=1,*
,然后决定使用find还是findstr。我的偏好是findstr。