我想写一个批处理脚本来查找给定变量中的最小数字:
set d=20
set c=30
set b=2
set a=5
(some script here)
我怎样才能获得最少的数量?
答案 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