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

[数值计算] 批处理怎样取出一组变量中数值最大和最小的变量名?

set num0=0&set num1=0&set num4=0&set num6=0&set num8=0&set num10=0&set num12=0
变量赋值
现在需要比较变量值的大小,取出最大和最小的变量名。(如果数值一致,输出【num数字】中数字最大和最小的那个)
哪位高人给段代码。谢谢

笨方法
  1. @echo off & setlocal ENABLEDELAYEDEXPANSION
  2. rem 初始化
  3. set num0=%random%&set num1=%random%&set num4=%random%&set num6=%random%&set num8=%random%&set num10=%random%&set num12=%random%
  4. set maxValue=%num0% &set minValue=%num0%
  5. for /f "tokens=1,2 delims==" %%a in ('set num ^| findstr "num[0-9]"') do (
  6. echo %%b
  7. if %%b gtr !maxValue! set maxValue=%%b
  8. if %%b lss !minValue! set minValue=%%b
  9. )
  10. echo 最小值:%minValue%最大值:%maxValue%
  11. pause
复制代码

TOP

回复 2# ivor


    set num ^| findstr "num[0-9]"
这行代码没理解。
能解释下吗

TOP

改自二楼代码,增加值相同时对变量名的排序。
  1. @echo off & setlocal ENABLEDELAYEDEXPANSION
  2. set mask=##########
  3. set num0=1&set num1=5&set num4=0&set num6=0&set num8=0&set num10=1&set num12=5&set num13=1
  4. set maxValue=%num0% &set minValue=%num0%
  5. rem sort value first
  6. for /f "tokens=1,2 delims=num=" %%a in ('set num ^| findstr "num[0-9]"') do (
  7.     set foo=!mask!%%a
  8.     set bar=!mask!%%b
  9.     set order_!bar:~-10!_!foo:~-10!=1
  10. )
  11. rem %%a = value, %%b = itemNO.
  12. for /f "tokens=1,2 delims=order=_" %%a in ('set order') do (
  13.     if defined min (set max=%%b) else (set min=%%b)
  14. )
  15. echo the minimal item: num%min:#=%, value = !num%min:#=%!
  16. echo the maximum item: num%max:#=%, value = !num%max:#=%!
复制代码
  1. the minimal item: num4, value = 0
  2. the maximum item: num12, value = 5
复制代码

TOP

非批,语法糖
  1. my %hash = (0=>1, 1=>5, 4=>0, 6=>0, 8=>0, 10=>1, 12=>5, 13=>1);
  2. my @idx = sort { $hash{$a} <=> $hash{$b} || $a <=> $b } ( keys %hash );
  3. grep { printf "hash[%2d] = %d\n", $_, $hash{$_} } @idx;
复制代码
  1. hash[ 4] = 0
  2. hash[ 6] = 0
  3. hash[ 8] = 0
  4. hash[ 0] = 1
  5. hash[10] = 1
  6. hash[13] = 1
  7. hash[ 1] = 5
  8. hash[12] = 5
复制代码

TOP

没有写PS 不科学。补一个:
  1. $VARIABLE = @(
  2. [PSCustomObject] @{ NAME = 'VAR1'; NUM= 1 }
  3. [PSCustomObject] @{ NAME = 'VAR2'; NUM= 2 }
  4. [PSCustomObject] @{ NAME = 'VAR3'; NUM= 20 }
  5. [PSCustomObject] @{ NAME = 'VAR7'; NUM= 20 }
  6. [PSCustomObject] @{ NAME = 'VAR8'; NUM= 20 }
  7. [PSCustomObject] @{ NAME = 'VAR10'; NUM= 23 }
  8. [PSCustomObject] @{ NAME = 'VAR9'; NUM= 20 }
  9. [PSCustomObject] @{ NAME = 'VAR4'; NUM= 12 }
  10. [PSCustomObject] @{ NAME = 'VAR5'; NUM= 23 }
  11. [PSCustomObject] @{ NAME = 'VAR6'; NUM= 12 }
  12. );
  13. $MIN_NAME = ( $VARIABLE | sort NUM | select -first 1 ).NAME;
  14. $MIN_VALUE = ( $VARIABLE | sort NUM | select -first 1 ).NUM;
  15. $MAX_NAME = ( $VARIABLE | sort NUM | select -LAST 1 ).NAME;
  16. $MAX_VALUE = ( $VARIABLE | sort NUM | select -LAST 1 ).NUM;
  17. "最大值:{0:0}={1:0}; 最小值:{2:0}={3:0}" -f $MAX_NAME,$MAX_VALUE,$MIN_NAME,$MIN_VALUE;
复制代码

TOP

返回列表