Board logo

标题: [文本处理] 批处理如何找出一列数据带有小数值的最大值 [打印本页]

作者: iq301    时间: 2014-8-16 13:16     标题: 批处理如何找出一列数据带有小数值的最大值

由于要找的最大值有小数点,所以先把值*100再进行对比,但结果不理想,请高手看下代码哪个地方出错,谢谢
  1. @echo off& setlocal enabledelayedexpansion
  2. for /f "tokens=2,3,7 delims= " %%a in ('type  G:\bat\test\CCLoad.txt') do (
  3. set a=%%a
  4. set b=%%b
  5. set c=%%c
  6. if !b!==RNC01 (
  7. set /a num=0
  8. set /a aa=!num!*100
  9. set /a bb=%%c*100
  10. if !aa! LSS !bb! (set num=!c!echo %num%)
  11. )
  12. )
  13. pause
复制代码
出来的结果是:
作者: apang    时间: 2014-8-16 13:56

如果都是两位小数,可以这样:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=3,7" %%a in ('type CCLoad.txt') do (
  3.         if /i "%%a"=="ABC01" (
  4.                 set "v=%%b"
  5.                 if !v:.^=! GTR !Max! (set Max=!v:.=!)
  6.         )
  7. )
  8. echo,!Max:~,-2!.!Max:~-2!
  9. pause
复制代码

作者: 浪子神剑    时间: 2014-8-16 13:59

本帖最后由 浪子神剑 于 2014-8-16 14:05 编辑
  1. @echo off& setlocal enabledelayedexpansion
  2. set /a max=0
  3. for /f "tokens=3,7 delims= " %%a in ('type  CCLoad.txt') do (
  4. set a=%%a
  5. set b=%%b
  6. echo !a! !b!
  7. set /a bb=!b:^.=!
  8. if !bb! geq !max! set /a max=!bb!
  9. )
  10. echo !max!
  11. pause
复制代码

作者: 浪子神剑    时间: 2014-8-16 14:01

回复 2# apang

想问下,你这个!Max!变量好像没定义,能直接用吗?
作者: apang    时间: 2014-8-16 14:37

回复 4# 浪子神剑


开启变量延迟后,If !a! GTR !b! 中的a和b都可以为空值,不过最好还是事先定义啦
作者: iq301    时间: 2014-8-16 15:05

回复 2# apang


    先把小数点变空值,再恢复,这样会不会出现别的什么问题么?分析了下答案,很正确哈。
谢谢
作者: iq301    时间: 2014-8-16 15:06

本帖最后由 iq301 于 2014-8-16 15:07 编辑

if !v:.^=! GTR !Max! (set Max=!v:.=!)  请教下这句代码的内涵。
echo,!Max:~,-2!.!Max:~-2! 中的逗号
谢谢
作者: DAIC    时间: 2014-8-16 16:44

回复 1# iq301


    你把 @echo off 删掉就能看到是哪里在报错了
作者: CrLf    时间: 2014-8-16 18:36

回复 4# 浪子神剑


    不定义也符合逻辑,但先定义比较严谨通用,定义为空或为0都行




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