2013-03-19 122 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