如何在批处理脚本中找到最小的一组数字?

时间:2017-04-19 07:46:11

标签: batch-file cmd

我想写一个批处理脚本来查找给定变量中的最小数字:

set d=20
set c=30
set b=2
set a=5

(some script here)

我怎样才能获得最少的数量?

3 个答案:

答案 0 :(得分:1)

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION 
set #1=20
set #2=30
set #3=2
set #4=5
SET "tempfile=u:\temp.###"

(
FOR /f "tokens=1*delims==" %%a IN ('set #') DO (
 SET /a num=1000000+%%b
 ECHO !num! %%a
)
)>"%tempfile%"

FOR /f "tokens=1,2" %%a IN ('type "%tempfile%"^|sort') DO ECHO %%b !%%b!
DEL "%tempfile%"

GOTO :EOF

将值分配给以#开头的变量。

set #命令将列出以#x 的#x = 值格式开始#的变量; for /f会将#x分配给%%a将#x 的值分配给%%b(请参阅文档提示中的for/?

在循环中,将1000000添加到变量的值,并将echo和和变量名称用空格分隔。将整个指令括在一对括号中,可以将输出重定向到文件。

然后对文件进行排序,该文件将包含第一列具有相同长度的数字的行(假设分配的值为< 1000000),变量名称将按其在第2列中指定的值的顺序显示。变量名称和值(!%% b!with delayedexpansion被调用产生名称在%%b中的变量的值。

只要有意志,就有办法......

答案 1 :(得分:0)

@ECHO OFF
set d=20
set c=30
set b=2
set a=5

set Smallest=%d%
if %c% lss %Smallest% set Smallest=%c%
if %b% lss %Smallest% set Smallest=%b%
if %a% lss %Smallest% set Smallest=%a%

Echo Smallest number is %Smallest%
pause>nul

更简单的方法是将第一个数字设置为变量("最小的"在这种情况下),然后检查第二个数字是否小于当前最小的数字。 如果第二个数字较小,则将第二个数字设置为"最小值"。 之后,对以下每个号码都这样做。

答案 2 :(得分:0)

我会这样做。这里需要使用不同的前缀命名变量。如果那是不可能的,那么就需要创建一个要比较的变量列表。

C:>TYPE sn.bat
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
set WRX_1=20
set WRX_2=30
set WRX_3=2
set WRX_4=5

SET /A "THIS_NUM=0"
SET /A "PREV_NUM=2147483647"

FOR /F "usebackq tokens=1* delims==" %%a IN (`set WRX_`) DO (
    SET /A "THIS_NUM=%%b"

    IF !THIS_NUM! LSS !PREV_NUM! (
        SET "MIN_NAME=%%a"
        SET "MIN_VALUE=%%b"
        SET /A "PREV_NUM=%%b"
    )
)

ECHO MIN_NAME is %MIN_NAME%
ECHO MIN_VALUE is %MIN_VALUE%

这是脚本的输出。

C:>CALL sn.bat
MIN_NAME is WRX_3
MIN_VALUE is 2