iT邦幫忙

1

批次檔語法詢問

舜~ 2021-02-24 14:37:331368 瀏覽

大家好

尋問一下批次檔的語法

我想要在Client端(Win7)上偵測是否已安裝指定的更新包,
所以下了如下的批次

IF not exist (wmic qfe list full ^| find "KB4012215") (
    echo KB4019264未安裝,仍有勒索漏洞 >> log.txt
)
IF not exist (wmic qfe list full ^| find "KB4015549") (
    echo KB4019264未安裝,仍有勒索漏洞 >> log.txt
)
IF not exist (wmic qfe list full ^| find "KB4019264") (
    echo KB4019264未安裝,仍有勒索漏洞 >> log.txt
)

但一直會出現錯誤訊息: 'qfe' 不是內部或外部命令、可執行的程式或批次檔。
想問一下語法怎麼調整比較好?


感謝koro_michael協助,目前版本

set result="Nothing"
FOR /F "" %%r in ('wmic qfe list full ^| find "KB4012215"') do set result=%%r
if "Nothing"==%result% echo KB4012215 not install >> log.txt

set result="Nothing"
FOR /F "" %%r in ('wmic qfe list full ^| find "KB4015549"') do set result=%%r
if "Nothing"==%result% echo KB4015549 not install >> log.txt

set result="Nothing"
FOR /F "" %%r in ('wmic qfe list full ^| find "KB4019264"') do set result=%%r
if "Nothing"==%result% echo KB4019264 not install >> log.txt

看更多先前的討論...收起先前的討論...
FOR /F "delims=: tokens=2" %%r in ('wmic qfe list full ^| find "KB4012215"') do set result=%%r

之後再判斷 result 變數的內容
舜~ iT邦高手 1 級 ‧ 2021-02-24 15:20:30 檢舉
我在cmd下測試語法沒任何回應,不知道是哪邊出現問題
`FOR /F "delims=: tokens=2" %r in ('wmic qfe list full ^| find "KB4601319"') do echo %r`

如果有結果的話`wmic qfe list full | find "KB4601319"`
回傳值長這樣`HotFixID=KB4601319`
舜~ iT邦高手 1 級 ‧ 2021-02-24 15:26:27 檢舉
我把"delims=: tokens=2"拿掉留空就好了 THX
抱歉,我直接貼我之前寫的內容,沒修改到一些設定

delims 是用來切割字串用的,你要的是全部的內容
舜~ iT邦高手 1 級 ‧ 2021-02-24 16:03:52 檢舉
不知道有無更簡化的方式? 沒有也沒關係
舜~ iT邦高手 1 級 ‧ 2021-02-24 16:05:56 檢舉
koro_michael大大回答一下,我選您為最佳解答
今天額度用完啦~明天吧
我不確定你說的更簡化的方式是什麼意思,不過我自己會這樣寫

程式的迴圈概念

@echo off

set list[0]=KB4012215
set list[1]=KB4015549
set list[2]=KB4019264
set i=0

:loop

if not defined list[%i%] goto :end

call set s=%%list[%i%]%%

for /F %%r in ('wmic qfe list full ^| find "%s%"') do (
goto flag
)

echo "%s% not install" >> log.txt

:flag

set /a "i+=1"

goto loop

:end
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
koro_michael
iT邦新手 2 級 ‧ 2021-02-25 17:36:56
最佳解答

儲存其他程式的輸出到變數

FOR /F "" %%r in ('wmic qfe list full ^| find "KB4012215"') do set result=%%r

程式迴圈概念

@echo off

set list[0]=KB4012215
set list[1]=KB4015549
set list[2]=KB4019264
set i=0

:loop

if not defined list[%i%] goto :end

call set s=%%list[%i%]%%

for /F %%r in ('wmic qfe list full ^| find "%s%"') do (
goto flag
)

echo "%s% not install" >> log.txt

:flag

set /a "i+=1"

goto loop

:end

我要發表回答

立即登入回答