iT邦幫忙

1

如何寫出判斷的BAT批次檔

GPX 2017-12-25 13:45:565709 瀏覽

請問各位大大
如何用BAT批次檔寫一個判斷式?因為要透過AD Login Script派送順便依據電腦版本安裝特定軟體。
例如電腦有個Client.ini檔案,想要識別檔案內容的Version=11.1 版本字串,
當字串是11.1就自動執行\192.168.1.1\A.exe,
當字串是12.1就自動執行\192.168.1.1\B.exe,
當字串是13.1就自動執行\192.168.1.1\C.exe,以此內推。

謝謝各位大大。

2 個回答

9
兩津勘吉
iT邦新手 5 級 ‧ 2017-12-25 14:18:54

隨便寫了一下,可符合你所要的需求~

@Echo Off

Findstr /I /P /C:"Version=11.1" D:\123.ini

If Errorlevel 1 Goto Old
If Errorlevel 0 Goto New

:New
cls
Echo This is New Version
Pause
Exit

:Old
cls
Echo This is Old Version
Pause
Exit

如果是多個條件的話,先假設你的.ini檔的內容非常單純,就是以下這樣做...懶人寫法...

@Echo Off

for /f "tokens=1" %%a in ('Findstr /I /P /C:"Version=" D:\123.ini') do (
set Version=%%a
)

If "%Version%" == "Version=11.1" Goto V11
If "%Version%" == "Version=12.1" Goto V12
If "%Version%" == "Version=13.1" Goto V13
Goto Error

:V11
Echo Version = 11.1
Pause
Exit

:V12
Echo Version = 12.1
Pause
Exit

:V13
Echo Version = 13.1
Pause
Exit

:Error
Echo Not Support
Pause
Exit

看更多先前的回應...收起先前的回應...
haoming iT邦好手 1 級 ‧ 2017-12-25 15:20:53 檢舉

如果是 3個以上的變數呢?? 您這邊的寫法是兩種條件判斷。不曉得3個以上的您會怎麼做?

froce iT邦研究生 4 級 ‧ 2017-12-25 16:06:15 檢舉

bat有switch case。
或者改用powershell去做,會更具可讀性。

已補充

haoming iT邦好手 1 級 ‧ 2017-12-25 16:39:49 檢舉

讚唷, 這個解法我喜歡。

GPX iT邦新手 5 級 ‧ 2017-12-25 23:00:22 檢舉

謝謝大大熱心幫忙,小弟感激不盡。

不客氣喔,如果可以的話請給個最佳解答~謝謝

4
haoming
iT邦好手 1 級 ‧ 2017-12-25 16:43:10

兩津勘吉的解法就已經可以解決問題了。我提供另外一種解法, 利用label的方法做switch case
原本的篩選是ini的每個設定都會設定為變數, 加上指定 version變數功能。
set 部分做法也可以直接用兩津勘吉的作法。

@echo off
FOR /F "delims=" %%A IN ('TYPE php.ini ^|FIND /V "[" ^|FIND "Version"') DO SET %%A

2>NUL CALL :v%version%
IF ERRORLEVEL 1 CALL :DEFAULT_CASE
goto :eof

:v1.1
echo 1.1
goto :eof

:v2.1
echo 2.1
goto :eof

:v3.1
echo 3.1
goto :eof

:DEFAULT_CASE
echo "default"
goto :eof

好方法~感謝分享/images/emoticon/emoticon12.gif

GPX iT邦新手 5 級 ‧ 2017-12-25 23:02:32 檢舉

雖然上面兩津大大的解答比較適合,但大大你的寫法也超棒的,讓小弟想到其他系統可應用,非常感謝大大的熱心相助。

我要發表回答

立即登入回答