2013-03-19 61 views
0

大家好我写这个剧本找到计算机的产品ID,如果它是真的,它会说你被禁止......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并将其改为可变名称,因为它需要在程序日志中显示ID。非常感谢您迄今为止给出的令人敬畏的帮助:)并感谢您的支持!

+0

我在哪里可以学习for/f命令,因为我不明白它:) – Adrianvdh 2013-03-19 15:16:43

+0

可能重复的[CMD和Windows ID](http:// stackoverflow.com/questions/15500892/cmd-and-windows-id) – 2013-03-19 17:52:42

回答

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 
+0

非常感谢你:) – Adrianvdh 2013-03-19 15:16:15

+0

对不起,它不工作。我需要的是获取产品ID并将其存储在一个变量中。我将使用自己的代码在日志中显示该变量...[code] wmic os获取“SerialNumber”| find/v“SerialNumber”>>%IDcheckfile%| findstr/i“***** - OEM - ******** - *****” IF%ERRORLEVEL%EQU 1(cls for/f“tokens = 2 *”%% i in ('reg query“HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion”/ v ProductID^| find“REG_SZ”')do set“productID = %% i” goto STARTLOG) IF%ERRORLEVEL%EQU 0(cls 回声你被禁止从这个程序) 暂停 退出)[/ code] – Adrianvdh 2013-03-19 15:30:43

+0

Nvm我试过并努力,它的工作,但谢谢你试图帮助我,我欣赏它。这里正确的代码:wmic os获得“SerialNumber”| find/v“SerialNumber”>>%IDcheckfile%| findstr/i“***** - OEM - ***** - *****” IF%ERRORLEVEL%EQU 1(cls for/f“tokens = 3”%% p in('reg query (HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion)/ v ProductID')do set“productID = %% p” 转到STARTLOG) IF%ERRORLEVEL%EQU 0(cls echo您被禁止从此程序中) pause exit) – Adrianvdh 2013-03-19 15:45:22

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读出括号线由行

  • 跳过空行之间提名的文件 - 即含有NO字符和 线开始的行“;”
  • “文件”实际上可能是命令的output。只需将命令括在single quotes管道和其他特殊字符需要被脱字符(^) 然后文本行读取分为TOKENS。每个令牌是由ER分隔,DELIMITERS
  • 默认情况下,分隔符是spacecommasemicolontab但可以通过上市="delims=abc"条款"之间的那些字符(被改变为“任何”设定的单个字符这将设置abc作为分隔符
  • 默认情况下,只是象征性1(呃,上线第一令牌)分配,它会被分配到metavariable(即循环控制信 - i在上例中)
  • 通过使用tokens=子句并列出令牌编号(以逗号分隔)可以分配其他令牌。编号最小的令牌分配给metavariable,下一个最低编号到后续metavariable,等等 - 所以"tokens=1,3delims=-将分别分配令牌1和3从线到%%i%%j如果FOR metavariable是i
  • 作为一种特殊的,令牌*手段

本质“中指定的行的最后一个令牌之后剩下的”,仅此而已。除此之外,还有许多额外的功能可供使用 - 例如文件名分割为驱动器,路径,名称,扩展名或大小,日期时间,属性等。所有记录在易于阅读的FOR /?从提示...

+0

1.'for/F'还可以读取立即字符串和命令输出(_stdout_)。 2.默认的分隔符只有_space_和_tab_! 3.也许你应该提到仅包含分隔符的行被认为是空的。 – aschipfl 2016-05-12 20:23:50