0

大家好,我正在编写这个脚本来查找计算机的产品 ID,如果它是真的,它会说你被禁止...

wmic os get "SerialNumber"|find /v "SerialNumber" >>%IDcheckfile% | findstr /i "****-OEM-*********-*****"
cls
IF %ERRORLEVEL% EQU 0 (
for /f "tokens=3" %%i in ('"SerialNumber"') do set "productID=%%i"

goto STARTLOG )
IF %ERRORLEVEL% EQU 1 (echo You are banned from this program )
pause
exit

现在这很好,但我需要从文本文件中复制 ID,我正在努力做到这一点。如果我什至需要将 ID 保存到文本文件,请告诉我。为什么我需要提取 ID 并将其存储在一个变量中是因为它需要在程序日志中显示 ID。非常感谢您迄今为止的出色帮助:) 并感谢您的帮助!

4

2 回答 2

0
@ECHO off
FOR /f "delims=" %%i IN ('wmic os get SerialNumber^|find "-"') DO SET productid=%%i
ECHO %productid%|FIND "-OEM-" >NUL
IF NOT ERRORLEVEL 1 ECHO OEM version - banned&GOTO end
ECHO productid=%productid%
:startlog

:end

pause

FOR /f 逐行读取括号之间指定的文件

  • 跳过空行 - 即不包含任何字符的行和以“;”开头的行
  • “文件”实际上可能output是命令的。只需将命令括在single quotesPipes 中,其他特殊字符需要通过插入符号 ( ^) 进行转义。然后将读取的文本行拆分为TOKENS. 每个令牌由 er 分隔,DELIMITERS
  • 默认情况下,分隔符是space, comma, semicolontab但可以通过列出子句的=and之间"的字符"delims=abc"(将设置a, b,c作为分隔符)来更改为“任何”单字符集。
  • 默认情况下,仅分配标记 1(er,行上的第一个标记),并将分配给metavariable(即循环控制字母 -i在上面的示例中)
  • 通过使用tokens=子句并列出标记编号(用逗号分隔),可以分配其他标记。编号最小的标记分配给metavariable,下一个编号最小的标记分配给随后的元变量,依此类推 -如果FOR元变量是,则将分别"tokens=1,3delims=-从行分配标记 1 和 3 到%%i和。%%ji
  • 作为一个特殊的,令牌*意味着“指定的最后一个令牌之后的行的其余部分”

基本上,就是这样。此外,您还可以应用大量额外的工具——例如文件名分解为驱动器、路径、名称、扩展名或大小、日期时间、属性等。所有记录在易于阅读FOR /?的提示中......

于 2013-03-19T18:27:38.363 回答
0

尝试这个:

@echo off &setlocal
for /f "tokens=2*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductID^|find "REG_SZ"') do set "ProductID=%%j"
if defined ProductID (echo.ProductID: %ProductID%) else echo You are banned!
endlocal
于 2013-03-19T15:07:45.087 回答