iT邦幫忙

0

cmd 字串比對

各位前輩好,

我目前要用cmd做出可以增加排成功能,但是某些特定電腦不加排成,我就想說用IP來判斷

set _create_schtasks=0
FOR /F "delims=: tokens=2" %%a in ('ipconfig ^| find "IP"') do if /i "%%a" == " 192.168.10.8" set _create_schtasks=1
......
if %_create_schtasks% == 0 (echo →→→→→→→增加) else (echo →→→→→→→不增加)

目前發現這種狀況... 請問有人知道是哪邊錯嗎?
此台電腦是WINDOWS SERVER 2003 sp2
https://ithelp.ithome.com.tw/upload/images/20190716/20108361FsuqsPmfcC.jpg

https://ithelp.ithome.com.tw/upload/images/20190716/20108361IOIarkpphe.jpg

還是說CMD有哪個指令可以判斷這串STRING是否包含另一串STRING?

PS:我發現windows server 2003 的都判斷不到...是指令不一樣嗎? 還是?

感謝 slime 大大!!!!

@echo off
set _create_schtasks=0
set _notip=0
(ipconfig | find "IP" | find "192.168.10.8" ) || (set _notip=1) > nul
if %_notip% equ 1 (set _notip=0) else (set _create_schtasks=1) > nul
if %_create_schtasks% == 0 (echo →→→→→→→增加排成) else (echo →→→→→→→不關機電腦)

然後有幾台中間就加幾行...orz

看更多先前的討論...收起先前的討論...
slime iT邦大師 1 級 ‧ 2019-07-16 12:03:13 檢舉
可以試試:
(ipconfig | find "IP Address" | find "192.168.10.8") || (想作的事)

用 find 判斷, 如果判斷結果為 false , 用兩個 || 執行下一個動作.
石頭 iT邦新手 1 級 ‧ 2019-07-16 14:56:30 檢舉
感謝 ><
slime iT邦大師 1 級 ‧ 2019-07-16 15:52:26 檢舉
有幾台的話是可以用迴圈或 %1 呼叫, 例如:
迴圈法:
for %%ip in (8.8.8.8 101.101.101.101) do ((檢測) || (動作))

%1法:
這個檔案命名為 1.bat
第二的檔案取名 2.bat , 2.bat 的內容為:
call 1.bat 8.8.8.8
call 1.bat 101.101.101.101
而 1.bat 的內容, 把 192.168.x.x 改成 %1 , 就會帶入第一個參數.
slime iT邦大師 1 級 ‧ 2019-07-16 16:12:46 檢舉
另外如果條件成立, 可以用兩個 && 來執行, 例如:
(ipconfig | find "169.254.") && (echo 沒抓到DHCP IP)
石頭 iT邦新手 1 級 ‧ 2019-07-17 08:45:23 檢舉
感謝slime大大!! 這下省了很多工夫了!

1 個回答

2
slime
iT邦大師 1 級 ‧ 2019-07-18 09:46:05
最佳解答

可以試試: 用 find 判斷, 如果判斷結果為 false , 用兩個 || 執行下一個動作, 如果條件成立, 可以用兩個 && 來執行. 例如:

(ipconfig | find "IP Address" | find "192.168.10.8") || (想作的事)
(ipconfig | find "169.254.") && (echo 沒抓到DHCP IP) 

有幾台的話是可以用迴圈或 %1~%9 呼叫, 例如:
迴圈法:

for %%ip in (8.8.8.8 101.101.101.101) do ((檢測) || (動作))

%1~%9 法:
這個檔案命名為 1.bat
第二的檔案取名 2.bat , 2.bat 的內容為:

call 1.bat 8.8.8.8
call 1.bat 101.101.101.101

而 1.bat 的內容, 把 192.168.x.x 改成 %1 , 就會帶入第一個參數.

而 %2~%9 並不是同時帶入九個, 而是如果有不同功能, 例如:
1.bat
echo %2 公司的 DNS 為 %1

2.bat

call 1.bat 8.8.8.8 Google
call 1.bat 101.101.101.101 TWNIC

顯示結果:

Google 公司的 DNS 為 8.8.8.8
TWNIC 公司的 DNS 為 101.101.101.101

如果應用在備份排程規劃, 可以像這樣:

for %%f in (企劃1的IP 企劃2的IP ....) do call sch_back_add %%f add sch_for_dg.xml
for %%f in (財務1的IP 財務2的IP ....) do call sch_back_add %%f add sch_for_fin.xml
for %%f in (測試的IP ....) do call sch_back_add %%f remove sch_for_test
rem for %%f in (主管1的IP 主管2的IP ....) do format /q /s (網路上的程式 copy 前要先檢查用途)

我要發表回答

立即登入回答