CMD和查找ProductID
大家好,我写这个脚本是为了找到一台计算机的产品ID,如果它是真的,它会说你被禁止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
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
将从行中分别将令牌1和3分配给“tokens=1,3delims=-
和%%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