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

可在 for /f 内部使用变量延迟:
  1. for /f ... in ('cmd /v /c echo !num!^|findstr "[^0-9]') do ...
复制代码
可以用逻辑连接符简化成:
  1. cmd /v /c echo !num!|findstr "[^0-9]||echo 请输入纯数字!
复制代码
不过更好的办法是改进思路:
  1. for /f "eol=0 delims=0123456789" %%a in ("%num:"=""%") do echo 请输入纯数字!
  2. ::将数字设为分隔符,若能取到第一节,则存在非数字字符
复制代码
  1. set /a test=num
  2. if "%test%" neq "%num:"=""%" echo 请输入纯数字!
  3. ::数值运算,八进制数和十六进制数会被转为十进制,而非纯数字变量则会被赋为0,运算后比较前后变量,若不相同则可知不为纯数字
复制代码
1

评分人数

TOP

本帖最后由 CrLf 于 2012-6-14 14:05 编辑

另:
  1. if not "%%i"=="" echo 请输入纯数字!
复制代码
这句是多余的,当 tokens 所取的节(隐式声明为 tokens=1)不存在时,for是不会为当前行执行命令的,举个例子,下面这段代码:
  1. for /f "tokens=1,2" %%a in (a.txt) do (
  2.    echo %%a,%%b
  3. )
复制代码
实际效果等几乎等于:
  1. for /f "tokens=1,2" %%a in (a.txt) do (
  2.    if "%%a" neq "" (
  3.       if "%%b" neq "" (
  4.          echo %%a,%%b
  5.       )
  6.    )
  7. )
复制代码
这就是 for 一定会跳过空行的本质原因

TOP

返回列表