2012-01-31 54 views
3

在我詳細介紹之前,我想強調一點,使用PowerShell不是一種選擇,因爲腳本應該在可能無法使用PowerShell的計算機上運行。如何從命令輸出中查找並提取子字符串?

我需要檢查安裝在Windows機器上的Internet Explorer版本,並根據它的版本對其進行操作。

到目前爲止,我的批處理腳本是這樣的:

@echo off 
setlocal 
for /f "tokens=*" %%a in ('reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer" /v Version') do (set IEVerReg=%%a) 
endlocal 

正如你可以看到我分配reg query輸出IEVarReg變量。在輸出中是在不同的Windows版本不同,例:

Windows XP中:

! REG.EXE VERSION 3.0 

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer 
    Version  REG_SZ 8.0.6001.18702 

的Windows 7:

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer 
    Version REG_SZ 9.0.8112.16421 

理想情況下,我想從版本號獲得的第一個數字並做類似的事情:

if 
    version == 8 
then 
    execute this 
elseif 
    version == 9 
then 
    execute that 

我敢肯定我會弄清楚如何做if部分,我得到的版本號,但它是越來越版本號的一部分,我不明白。我可以在bash,perl等中輕鬆完成,但不知道Windows命令行。

幫助將非常感激。

PS。我看過Jerold Schulman's script,但它返回了對我來說太多的整個版本號。

回答

6

你需要把在一起的所有這件

  1. 訪問註冊表來查詢的版本號。見REG QUERY /?

    REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version 
    
  2. 提取包含由REG命令返回的信息的版本就行了。您可以將REG的輸出傳輸到FIND命令中。請參閱HELP FIND

    REG ... | FIND "REG_SZ" 
    
  3. 將結果設置爲變量。你可以用FOR /F命令來完成。使用tokens=3來提取返回行中第三個位置的版本號。還要注意脫離管道字符|所需的插入符號^。見HELP FOR

    FOR /F "tokens=3" %%a in ('REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version ^| FIND "REG_SZ"') DO (
        SET v=%%a 
    ) 
    
  4. 提取版本字符串主版本號。在此期間使用delims=.進行解析。請參閱HELP FOR。爲了適當擴展變量,您必須使用擴展擴展並使用!語法來訪問變量。此外,使用/A將其視爲一個數字。見HELP SET

    FOR /F "tokens=1 delims=." %%m in ('echo !v!') do (
        SET /A m=%%m 
    ) 
    
  5. 最後,添加邏輯的IE版本

    IF .!m!==.8 (
        echo it's 8 
    ) ELSE (
        ... 
    

工作BAT的第一個版本必須是這樣的......

@echo off 
setlocal enabledelayedexpansion 
FOR /F "tokens=3" %%a in ('REG QUERY "HKLM\Software\Microsoft\Internet Explorer" /v Version ^| FIND "REG_SZ"') DO ( 
    set v=%%a 
    echo !v! 
    FOR /F "tokens=1 delims=." %%m in ('echo !v!') do (
     SET /A m=%%m 
    ) 
    IF !m! EQU 8 (
     echo it's 8 
    ) ELSE (
     IF !m! EQU 9 (
     echo it's 9 
    ) ELSE (
     echo norrrrr 
    ) 
    ) 
) 
endlocal 
3

回到過去,在我完全停止使用微軟產品之前,我從JP Software發佈了一款名爲4DOS的產品。該公司仍然存在,並且他們保持了最新的產品線。它是商業軟件,但它使DOS + Windows + OS/2腳本變得輕而易舉。 (是的,REXX不是一件輕而易舉的事。)

4DOS還獲得諾頓授權,並作爲NDOS發佈,它比原始版本有更多新聞。

這就是說,如果內存服務,你應該也可以使用SET命令創建一個變量子串。

SET start=1 
SET length=1 
SET string=%IEVerReg% 
CALL SET substribg=%%string:~%start%,%length%%% 

我很想知道這是否有效。幸運的是,我沒有一個Windows盒子來測試它。

2

這裏是你鏈接到似乎什麼工作,稍作修改:

@echo off 
setlocal 
set qry=reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer" /v Version 
set fnd=findstr /I /L /C:"REG_SZ" 
for /f "Tokens=2*" %%u in ('%qry%^|%fnd%') do (
set vsn=%%v 
) 
@echo %vsn:~0,1% 
endlocal 
+0

非常明顯!謝謝! – 2012-01-31 18:18:32

相關問題