0

我有一个 100 多个序列号的列表。我要做的是:检查我正在使用的计算机的序列号是否在列表中。是否可以在 Windows 批处理脚本中执行此操作?

4

3 回答 3

1

此命令行显示我的计算机(Windows 8)中的 BIOS 序列号:

for /F "skip=1 tokens=3" %s in ('wmic bios list BRIEF') do echo %s

您可以对其进行测试和调整,直到得到您想要的。例如:

@echo off
for /F "skip=1 tokens=3" %%s in ('wmic bios list BRIEF') do set serial=%%s
for /F "delims=" %%s in (serialList.txt) do if "%%s" equ "%serial%" goto found
echo Not found
goto :EOF

:found
echo OK

编辑:我修改了程序,以便在批处理文件中包含序列号;我还使用了wmicStephan 建议的参数修改:

@echo off
for /F "tokens=2 delims==" %%s in ('wmic bios get serialnumber /value') do set serial=%%s
for %%s in (serial0 serial1 serial2 serial3 serial4 serial5 serial6 serial7 serial8 serial9
            ser90 ser91 ser92 ser93 ser94 ser95 ser96 ser97 ser98 ser99 ser100 ser101) do (
   if "%%s" equ "%serial%" goto found
)
echo Not found
goto :EOF

:found
echo OK
于 2013-11-13T01:03:58.770 回答
1

无需遍历文件中的每一行:

@echo off
for /F "tokens=2 delims==" %%s in ('wmic bios get serialnumber /value') do ( 
  findstr "%%s" serials.txt
  )
if %errorlevel%==0 ( echo Serialnumber found ) else ( echo Serialnumber not listed )
于 2013-11-13T07:14:30.023 回答
0

如果您将列表用作搜索字符串并将 WMIC BIOS 输出用作目标,则无需 FOR 循环。我相信序列号始终是 10 个字符,因此不需要任何/I选项。但是,如果序列号长度可以变化,则/I由于 FINDSTR 错误而需要该选项:为什么这个具有多个文字搜索字符串的 FINDSTR 示例找不到匹配项?

wmic bios get serialNumber|findstr /blg:list.txt&&echo number found||echo number not listed

您可以通过使用 将 FINDSTR 输出重定向到 nul 来禁止将序列号输出到屏幕上>nul

于 2013-11-13T18:48:34.723 回答