iT邦幫忙

0

windows 批次檔 擷取某一組網卡MAC

去年有發問過類似問題有得到以下解答

@echo off

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

pause

但如果電腦有2組以上的時候,輸出就會變成有兩行。
上面的指令也無法使用類似指令輸出成txt"> C:\mac.txt" 他只會輸出最後一行

請問如果電腦存在2組以上的MAC,要如何才能夠擷取出其中一組?

jeles51 iT邦新手 2 級 ‧ 2018-07-18 09:59:28 檢舉
改成
for /f "tokens=1-7 delims=- " %%i in ('getmac ^| find "-"') do echo %%i:%%j:%%k:%%l:%%m:%%n >> d:\mac.txt 可輸出全部.
補充提問
輸出後要擷取第一行(第一組)或是第二行(第二組)或是第三行(第三組)呢?
蟹老闆 iT邦大師 1 級 ‧ 2018-07-19 03:48:04 檢舉
Set /a Skip=2+1(變更1的值來取得指定行)
for /f "skip=%SKIP%" %%i in ('getmac') do Echo %%i>mac.txt&&Exit
Echo 找不到指定的 MAC 號(當指定值大於資料行時顯示)
pause

1 個回答

4
jeles51
iT邦新手 2 級 ‧ 2018-07-18 10:44:14
最佳解答

假設,共有3組MAC,要取出第2組.
步驟1:取出全部mac到 d:\mac.txt
for /f "tokens=1-7 delims=- " %%i in ('getmac ^| find "-"') do echo %%i:%%j:%%k:%%l:%%m:%%n >>d:\mac.txt

步驟2:由mac.txt中,取出第2組mac到 d:\mac2.txt
for /f "tokens=1*delims=:" %%G in ('findstr /n "^" d:\mac.txt') do if %%G equ 2 echo %%H >d:\mac2.txt

上述 equ 2 的意思,是取出第2行.

補充:
2個步驟可濃縮成1行,結果會輸出到d:\mac.txt
for /f "tokens=1-7 delims=- " %%i in ('getmac ^| find "-"') do echo %%i:%%j:%%k:%%l:%%m:%%n >>d:\mac.txt && for /f "tokens=1*delims=:" %%G in ('findstr /n "^" d:\mac.txt') do if %%G equ 5 echo %%H >d:\mac.txt

看更多先前的回應...收起先前的回應...

謝謝J大及時解答

有幾個地方不太懂

  1. 如果不要":" 是不是步驟二就無法透過篩選?
  2. 如果取第1組或是第3組呢?

補充說明我看到了 現在只剩不要":"的問題

我使用了以下方式實現 不過好冗長啊~~

:step3
for /f "tokens=1-7 delims=:" %%i in (d:\mac2.txt) do echo %%i%%j%%k%%l%%m%%n >>d:\mac3.txt
jeles51 iT邦新手 2 級 ‧ 2018-07-18 11:35:25 檢舉

你找到答案了呀,
在步驟1,把:拿掉就好囉.
單行指令如下:

for /f "tokens=1-7 delims=- " %%i in ('getmac ^| find "-"') do echo %%i%%j%%k%%l%%m%%n >>d:\mac.txt && for /f "tokens=1*delims=:" %%G in ('findstr /n "^" d:\mac.txt') do if %%G equ 5 echo %%H >d:\mac.txt

非常感謝J大 哈哈

我要發表回答

立即登入回答