找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26539|回复: 6

[文件操作] 批处理命令for循环计数为何出错?

[复制链接]
发表于 2012-8-14 18:58:03 | 显示全部楼层 |阅读模式
  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. 可循环一次后就退出来了,不明白哪里出问题了
发表于 2012-8-15 11:05: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
复制代码
 楼主| 发表于 2012-8-15 12:06:31 | 显示全部楼层
放在循环体外面是不行的。
不知道还有getmac这个东西~
发表于 2012-8-16 10:36:59 | 显示全部楼层
回复 3# wodesitanfu

好吧,你认为不行偶也没办法。反正偶认为可行
 楼主| 发表于 2012-8-16 17:03:10 | 显示全部楼层
回复  wodesitanfu

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



    goto的目的是判断for循环下变量i的长度的,放外面了,里面对变量的长度只能判断一次
发表于 2012-8-16 18:59:43 | 显示全部楼层
回复 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
复制代码
发表于 2012-8-16 20:41:35 | 显示全部楼层
判断字符串长度可以用变量偏移,比如:
if "!str:~17!"=="" if "!str:~16!" neq "" echo 变量 str 的长度短于 17 且长于 16
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 11:26 , Processed in 0.017754 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表