iT邦幫忙

0

windows 批次檔 擷取某一個字串(單字)

我需要擷取電腦裡的MAC 然後需要驗證幾個規則

  1. 開頭是否是00-11-22
  2. 兩張網卡是否一樣

目前的想法是先用getmac 取得mac 資料,然擷取mac 部分,透過FC 的個指令與我先寫好的sample 進行比對。

但是問題來了,我利用findstr 去擷取mac 會連後面的裝置識別碼一起擷取

例如(findstr "00-11-22" d:\mac.txt)
00-11-22-72-43-79 \Device\Tcpip_{92FBC6B1-70FD-492A-8099-A39EFB490082}
00-11-22-72-43-7A 媒體已中斷連線

有沒有辦法只擷取00-11-22-72-43-7A 以及00-11-22 這兩種?

爬了很多文都沒有找到可用的方法

看更多先前的討論...收起先前的討論...
小成 iT邦高手 10 級 ‧ 2017-05-18 13:38:53 檢舉
我用這樣他就只有出現MAC,後面那串沒出現耶,你要不要試試看?
for /f %i in ('getmac /nh') do echo %i
是說我也不知道為什麼後面那串消失....
明明直接執行 getmac /nh 的時候,後面那串有出現的....
請問路徑是要填在哪裡? 假設我的getmac 輸出成D:\mac.txt 的話
我找到使用方法了 不過像是我電腦有2組網卡號碼 他會個別echo 顯示出來
有辦法只顯示我要的其中一個嗎?
另外是否有能夠擷取前六碼的指令? 真的非常謝謝你
小成 iT邦高手 10 級 ‧ 2017-05-18 14:45:02 檢舉
for /f %i in ('getmac /nh') do if %i==00-11-22-72-43-7A echo %i > D:\mac.txt
小成 iT邦高手 10 級 ‧ 2017-05-18 14:46:35 檢舉
擷取幾碼的參考一下
http://ithelp.ithome.com.tw/questions/10186090
for /f %i in ('getmac /nh') do if %i==00-11-22-72-43-7A echo %i > D:\mac.txt

這行可以請教您嗎? MAC 我如果不知道是多少呢?
例如:
我只想要把單一MAC 輸出(00-11-22-72-43-7A) (因為我電腦有2張網卡 用這指令他會輸出兩次 但只有最後一筆有資料)
小成 iT邦高手 10 級 ‧ 2017-05-18 17:26:34 檢舉
啊? 如果不知道多少?那你怎麼會說【有辦法只顯示我要的其中一個嗎?】? 那條件是?
實際的結果你要不要列出來看一下?
可能是我敘述有問題
我的目的是要把電腦的某一張網卡的MAC 輸出兩種格式 (1). 12碼(全部) (2). 前6碼

然後我的電腦for /f %i in ('getmac /nh') do echo %i 結果如下
C:\Users\xxx>for /f %i in ('getmac /nh') do echo %i > D:\mac5.txt

C:\Users\xxx>echo 54-EE-75-85-E2-5D 1>D:\mac5.txt

C:\Users\xxx>echo 00-11-22-72-43-79 1>D:\mac5.txt

C:\Users\xxx>echo 00-11-22-72-43-7A 1>D:\mac5.txt

他會變成這樣,我去看mac5.txt 他只有秀最後一個00-11-22-72-43-7A
要怎麼樣才能只秀出3張網卡中某一張網卡的兩種格式 (1). 12碼(全部) (2). 前6碼
小成 iT邦高手 10 級 ‧ 2017-05-19 08:28:41 檢舉
1.
因為我上面寫的有條件,只挑一個,所以用 > ,這是覆寫
如果要繼續寫入,要用 >>

2.
要幾碼請參考
http://ithelp.ithome.com.tw/questions/10186090
要開延遲環境變數擴充,然後先把值設一個變數,然後就可以針對這個變數指定要哪個位置的字元。
詳情看 setlocal /? 跟 set /?
1. 成功了 我用錢被你的指令for /f %i in ('getmac /nh') do echo %i 搭配>> 可以輸出電腦所有的MAC 號碼(沒有後面的裝置碼) 然後我再使用findstr 擷取要的那一組

2. 我再來研究一下 剛剛試了幾個參數都沒有辦法只擷取前六碼
另外有一個問題我把for /f %i in ('getmac /nh') do echo %i >> d:\mac.txt 寫進bat 裡面會無法執行?
小成 iT邦高手 10 級 ‧ 2017-05-19 10:19:39 檢舉
下面eigen大寫的比較合理喔,用他的寫法試試
寫進BAT要把for裡面的%改成%%
反之亦同
eigen大的的確可以了

不過我要謝謝小成大幫我提示了這麼多 讓我學到不少

十分感激
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
eigen
iT邦新手 1 級 ‧ 2017-05-19 09:26:44
最佳解答
@echo off

for /f "tokens=1-7 delims=- " %%i in ('getmac ^| find "-"') do echo %%i:%%j:%%k:%%l:%%m:%%n

pause

每一行的六位數都能抓,接下來就是你預設會有幾個 mac address 的問題,要產生幾個變數來放這些 mac address

E大您好,
最近回過頭來看這個問題,可以請教您幾個問題嗎?

關於您回答的內容,其中您提到的"接下來就是你預設會有幾個 mac address 的問題,要產生幾個變數來放這些 mac address"

如果說我現在只用這個批次檔 抓取出3組MAC如下
001122334455
AABBCCDDEEFF
6677889900AA

我要如何只輸出其中一組就好?

測試過幾種方式不知道為什麼都只會輸出最後一行。

謝謝。

eigen iT邦新手 1 級 ‧ 2018-07-24 21:09:15 檢舉

@echo off

for /f "tokens=1-7 delims=- " %%i in ('getmac ^| find "-"') do (
echo %%i:%%j:%%k:%%l:%%m:%%n
goto :eof
)

pause

我要發表回答

立即登入回答