iT邦幫忙

0

批次檔if比對ip address

各位學長
想寫一個批次檔為不同網段執行不同命令
目前只知道如下寫法~但好像行不通

set /p IP=輸入IP位址:

if "%IP%" == "192.168.1.*" goto test1
goto error

:test1
echo 網段正確
pause

:error
echo 網段錯誤
pause

想請問是否辦得到呢?
謝謝

slime iT邦大師 1 級 ‧ 2018-09-17 14:03:37 檢舉
這寫法是從哪邊取得的呢?

可以用幾個方式組合:
1. 用 ipconfig 列出相關資料.
2. 用 find 比較是否有某字串.
3. 用批次檔的 ERRORLEVEL 或 && (和) , || (或) 來比對, 調整要執行的項目.

比如: (未確認)
( ipconfig | find "192.168.1." ) || (不符合執行這個)
( ipconfig | find "192.168.1." ) && (若符合執行這個)

1 個回答

0
蟹老闆
iT邦大師 1 級 ‧ 2018-09-17 22:03:33

請參考

@Echo Off
SetLocal ENABLEDELAYEDEXPANSION
Set 192.168.1.*=A
Set 192.168.2.*=B
SEt 192.168.3.*=C
Set /P IP=輸入IP位址:
if defined %IP% Echo 我是%IP%&Goto :!%IP%!
Echo 沒有這個網段
pause
Exit /b
:A
Echo 跳到 A
pause
Exit /b
:B
Echo 跳到 B
pause
Exit /b
:C
Echo 跳到 C
pause
Exit /b
yehjehom iT邦新手 5 級 ‧ 2018-09-18 11:33:41 檢舉

學長
試了一下您的寫法與我的寫法
問題點都是*
不被視作萬用字元

輸入任何ip都是"沒有這個網段"
只有輸入192.168.1(2、3).*
才會進去執行

蟹老闆 iT邦大師 1 級 ‧ 2018-09-18 12:18:49 檢舉

額... 此星非彼星
我以為你是輸入192.168.1.*之類的

@Echo Off
SetLocal ENABLEDELAYEDEXPANSION
Set 192.168.1=A
Set 192.168.2=B
SEt 192.168.3=C
Set /P IP=輸入IP位址:
for /f "tokens=1-4 delims=." %%i in ("%IP%") do (
    if %%l GTR 0 If %%l LEQ 255 if defined %%i.%%j.%%k Goto :!%%i.%%j.%%k!
    Echo 沒有這個網段
    pause
)
Exit /b
:A
Echo 跳到 A
pause
Exit /b
:B
Echo 跳到 B
pause
Exit /b
:C
Echo 跳到 C
pause
Exit /b

以上可行但有缺點,用 findstr 會更好,有空再想一個更好的方式

我要發表回答

立即登入回答