[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理命令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. 可循环一次后就退出来了,不明白哪里出问题了

一般是用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
复制代码

TOP

放在循环体外面是不行的。
不知道还有getmac这个东西~

TOP

回复 3# wodesitanfu

好吧,你认为不行偶也没办法。反正偶认为可行

TOP

回复  wodesitanfu

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



    goto的目的是判断for循环下变量i的长度的,放外面了,里面对变量的长度只能判断一次

TOP

回复 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
复制代码

TOP

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

TOP

返回列表