2014-06-10 48 views
0

我試圖複製在Stackoverflow上的這個問題的其他答案中使用的方法,但沒有人爲我工作。我曾嘗試:如何使用Windows批處理將文本文件內容讀入變量?

@echo off 
wmic product where name="BMNIA" get Name, Version>tmp.txt 
type tmp.txt 
REM setlocal ENABLEDELAYEDEXPANSION 
REM for /f "delims=" %%x in (tmp.txt) do set ver=%%x 
set /p ver=<tmp.txt 
echo ver: %ver% 
REM endlocal 

同時使用重定向方法和for循環的方法,但每個返回如下:

Name Version 
BMNIA 1.1.1.4 
ver: 

類型命令顯示腳本能夠讀取文件內容,但由於某種原因,ver仍然是空的。任何人都可以看到我做錯了什麼?

回答

0

試試這樣說:

@echo off 
setlocal enableextensions enabledelayedexpansion 
set PRODUCTNAME=BMNIA 
set VER= 
for /f "skip=1 delims=" %%p in ('wmic product where name^="%PRODUCTNAME%" get Version 2^> NULL') do (
    set VER=%%p 
    if {!VER!} NEQ {} goto :BREAK 
) 
:BREAK 
echo %VER% 
endlocal 

如果未安裝該產品,VER是空的。如果有多個匹配項,則VER將包含wmic.exe輸出的第一個實例的版本號。

+0

工作。非常感謝你!我沒有意識到有必要跳過一條線。我認爲文件讀取會持續到結束。我也沒有理解(仍然沒有)wmic命令的輸出需要被重定向到NULL。 – Don

+0

@Don不會將輸出重定向,而是將錯誤重定向到NUL。嘗試一個不存在的產品名稱,你會明白爲什麼它是有道理的。 – Stephan

0
@echo off 
set ver=not installed 
for /f "tokens=2 delims==" %%p in ('wmic product where name^="BMNIA" get Version /value 2^>nul') do set ver=%%p 
echo ver: %ver% 

set ver=not installed 
for /f "tokens=2 delims==" %%p in ('wmic product where name^="whatever" get Version /value 2^>nul') do set ver=%%p 
echo ver: %ver% 
+0

對於這樣的查詢,你不需要'find'命令。由於您正在使用'='作爲分隔符並只詢問第二個標記,'%% p'只會填充用'='符號分隔兩個元素的行。如果未填充'%% p',則'do'子句中的代碼不會被執行,即該行被忽略,因爲它沒有填充任何請求的令牌。 –

+0

@MCND:你說得對。我習慣於用'find',所以我從來沒有想過要這樣做。 – Stephan

相關問題