0

みなさん、こんにちは。私はこのスクリプトを作成して、コンピューターの製品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を表示する必要があるためです。これまでの素晴らしい助けに感謝します:)そしてこれをありがとう!

4

2 に答える 2

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
于 2013-03-19T15:07:45.087 に答える
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 は、括弧で指定されたファイルを 1 行ずつ読み取ります

  • 空行のスキップ - つまり、文字を含まない行と「;」で始まる行です。
  • 「ファイル」は、実際にoutputはコマンドの である可能性があります。コマンドをパイプで囲むだけで、その他の特殊文字はキャレット ( )single quotesでエスケープする必要があります。各トークンは er で区切られます。^TOKENSDELIMITERS
  • デフォルトでは、区切り文字はspace, comma,semicolonですが、節のとのtab間にこれらの文字をリストすることで、単一文字の「任意の」セットに変えることができます(これにより、, ,が区切り文字として設定されます。=""delims=abc"abc
  • デフォルトでは、トークン 1 (行の最初のトークンである er) のみが割り当てられ、これはmetavariable(つまりi、上記の例ではループ制御文字) に割り当てられます。
  • 節を使用しtokens=てトークン番号を (コンマで区切って) リストすることにより、他のトークンを割り当てることができます。最も小さい番号のトークンが に割り当てられmetavariable、次に小さい番号のトークンが後続のメタ変数に割り当てられます。というように、 FORメタ変数がである場合、"tokens=1,3delims=-行からトークン 1 および 3 がそれぞれ%%iおよびに割り当てられます。%%ji
  • 特別に、トークン*は「指定された最後のトークンの後の行の残り」を意味します

本質的に、それだけです。さらに適用できる追加機能が山ほどあります - たとえば、ファイル名をドライブ、パス、名前、拡張子またはサイズ、日時、属性などに分割します。すべてがプロンプトから読みやすい形で文書化されてFOR /?います...

于 2013-03-19T18:27:38.363 に答える