CMD并查找ProductID

时间:2013-03-19 14:38:22

标签: cmd

大家好我正在编写这个脚本来查找计算机的产品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并将其改为varible,因为它需要在程序日志中显示ID。非常感谢您迄今为止的出色帮助:)并感谢您的支持!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 quotes管道中,其他特殊字符需要由插入符号(^)进行转义 然后将文本行读取分成TOKENS。每个令牌由er DELIMITERS
  • 分隔
  • 默认情况下,分隔符为spacecommasemicolontab,但可以通过列出这些字符之间的字符来改变为“任意”的一组字符。 =子句的""delims=abc"(将abc设置为分隔符。
  • 默认情况下,只分配令牌1(行上的第一个令牌),它将被分配给metavariable(即上面的循环控制字母 - i例子)
  • 通过使用tokens=子句并列出令牌编号(以逗号分隔),可以分配其他令牌。编号最小的标记分配给metavariable,下一个最低编号分配给后续元变量,依此类推 - 所以"tokens=1,3delims=-会将标记1和3从行分配给%%i如果 FOR 元变量为%%j,则分别为i
  • 作为特殊标记,令牌*表示“指定最后一个标记后的其余部分”

基本上就是这样。此外,您还可以应用大量额外设施 - 例如,文件名压缩为驱动器,路径,名称,扩展名或大小,日期时间,属性等。所有内容都记录在易于阅读的FOR /?中,来自提示符......