Board logo

标题: [文件操作] 批处理命令for循环计数为何出错? [打印本页]

作者: wodesitanfu    时间: 2012-8-14 18:58     标题: 批处理命令for循环计数为何出错?

  1. @echo off
  2. if exist physical.txt  del /f /q physical.txt  >>nul
  3. set /a number=0
  4. ipconfig /all |findstr /i "Physical" >>physical.txt
  5. setlocal ENABLEDELAYEDEXPANSION
  6. for /f "delims=: tokens=2" %%i in (physical.txt) do (
  7. set str=%%i
  8. set "str=!str: =!"
  9. :Next
  10. if not "!str:~%number%,1!"=="" (
  11. set /a number+=1
  12. goto :Next )
  13. if !number! equ 17 set /a macnum+=1
  14. set /a number=0
  15. )
  16. echo  %macnum%
  17. pause
复制代码
原本是想打算通过MAC address来计算出当前系统的物理网卡,先用关键字取出带physical的字符串,再判断长度是否为17,则可以断定当前的字符串代表的是一个MAC地址,然后计数加1. 可循环一次后就退出来了,不明白哪里出问题了
作者: apang    时间: 2012-8-15 11:05

一般是用call :Next,并将Next标签段放在for循环体外。
楼主也想复杂了,试试这样:
  1. @echo off
  2. for /f %%i in ('getmac^|findstr /b "..-"') do set/a macnum+=1
  3. echo %macnum%
  4. pause
复制代码

作者: wodesitanfu    时间: 2012-8-15 12:06

放在循环体外面是不行的。
不知道还有getmac这个东西~
作者: apang    时间: 2012-8-16 10:36

回复 3# wodesitanfu

好吧,你认为不行偶也没办法。反正偶认为可行
作者: wodesitanfu    时间: 2012-8-16 17:03

回复  wodesitanfu

好吧,你认为不行偶也没办法。反正偶认为可行
apang 发表于 2012-8-16 10:36



    goto的目的是判断for循环下变量i的长度的,放外面了,里面对变量的长度只能判断一次
作者: apang    时间: 2012-8-16 18:59

回复 5# wodesitanfu

你自己搜索下call用法在下结论。。。
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3.   set "str=%%i"
  4.   setlocal enabledelayedexpansion
  5.   call :Next
  6.   echo !n!&endlocal
  7. )
  8. pause&goto :eof
  9. :Next
  10. if not "!str:~%n%!"=="" set/a n+=1&goto :Next
复制代码

作者: CrLf    时间: 2012-8-16 20:41

判断字符串长度可以用变量偏移,比如:
if "!str:~17!"=="" if "!str:~16!" neq "" echo 变量 str 的长度短于 17 且长于 16




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2