标题: [文件操作] 批处理命令for循环计数为何出错? [打印本页]
作者: wodesitanfu 时间: 2012-8-14 18:58 标题: 批处理命令for循环计数为何出错?
- @echo off
- if exist physical.txt del /f /q physical.txt >>nul
- set /a number=0
- ipconfig /all |findstr /i "Physical" >>physical.txt
- setlocal ENABLEDELAYEDEXPANSION
- for /f "delims=: tokens=2" %%i in (physical.txt) do (
- set str=%%i
- set "str=!str: =!"
- :Next
- if not "!str:~%number%,1!"=="" (
- set /a number+=1
- goto :Next )
- if !number! equ 17 set /a macnum+=1
- set /a number=0
- )
- echo %macnum%
- pause
复制代码
原本是想打算通过MAC address来计算出当前系统的物理网卡,先用关键字取出带physical的字符串,再判断长度是否为17,则可以断定当前的字符串代表的是一个MAC地址,然后计数加1. 可循环一次后就退出来了,不明白哪里出问题了
作者: apang 时间: 2012-8-15 11:05
一般是用call :Next,并将Next标签段放在for循环体外。
楼主也想复杂了,试试这样:- @echo off
- for /f %%i in ('getmac^|findstr /b "..-"') do set/a macnum+=1
- echo %macnum%
- 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用法在下结论。。。- @echo off
- for /f "delims=" %%i in (a.txt) do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- call :Next
- echo !n!&endlocal
- )
- pause&goto :eof
- :Next
- 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 |