CMD和查找ProductID

CMD和查找ProductID,cmd,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" g

大家好,我写这个脚本是为了找到一台计算机的产品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,我正在努力做到这一点。如果我甚至需要将to ID保存到文本文件,请告诉我。我之所以需要提取ID并将其存储在变量中,是因为它需要在程序日志中显示ID。非常感谢你迄今为止所给予的巨大帮助:)谢谢你的这一次

试试这个:

@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
FOR/f逐行读取括号中指定的文件

  • 跳过空行-即不包含字符和字符的行 行首“;”
  • “文件”实际上可能是命令的
    输出。只需将命令括在
    单引号中
    管道,其他特殊字符需要用插入符号(
    ^
    )转义 然后,文本行读取被拆分为
    标记
    。每个令牌由分隔符分隔,
    分隔符
  • 默认情况下,分隔符是
    空格
    逗号
    分号
    选项卡
    ,但可以通过列出
    “delims=abc”
    子句的
    =
    之间的字符,将其更改为“任意”单字符集(将
    a
    b
    c
    设置为分隔符
  • 默认情况下,只分配令牌1(er,行上的第一个令牌),它将被分配给
    元变量
    (即上例中的循环控制字母-
    i
  • 通过使用
    tokens=
    子句并列出令牌编号(用逗号分隔),可以分配其他令牌。编号最低的令牌分配给
    元变量,编号次低的令牌分配给后续元变量,依此类推-so
    “tokens=1,3delims=-
    将从行中分别将令牌1和3分配给
    %%i
    %%j
    ,如果
    元变量为
    i
  • 作为特殊标记,
    *
    表示“最后一个指定标记之后的行的剩余部分”

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

我在哪里可以学习for/f命令,因为我不懂它:)抱歉,它可能重复不起作用。我需要的是获取产品ID并将其存储在变量中。我将使用自己的代码在日志中显示该变量…[code]wmic操作系统获取“SerialNumber”|查找/v“SerialNumber”>%IDcheckfile%| findstr/I“********-OEM-*****-IF%ERRORLEVEL%eq%1(cls for/f”令牌=2*)%I in('reg query“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion”/v ProductID^ find“REG_SZ”)设置“ProductID=%%i”转到STARTOG)如果%ERRORLEVEL%eq 0(cls echo您被禁止参与此程序)暂停退出)[/code]Nvm我尝试过并努力过了,但感谢您的帮助,我非常感激。这里有正确的代码:wmic os get“SerialNumber”“| find/v”SerialNumber“>>%IDcheckfile%|findstr/i”*****-OEM-*****-*****”如果%ERRORLEVEL%eq 1(cls for/f“tokens=3”%%%p in('reg query query“HKLM\Software\Microsoft\windowsnt\CurrentVersion”/v ProductID')在%ERRORLEVEL%eq%0(cls echo您被禁止从此程序)暂停退出)1时,请设置“ProductID=%p”转到STARTOG<代码>for/F
还可以读取即时字符串和命令输出(stdout)。2.默认分隔符仅为空格和制表符!3.也许您应该提到,只包含分隔符的行被认为是空的。
@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