在Windows批处理脚本中查找4个数字中最大的一个

时间:2017-08-31 13:27:15

标签: windows batch-file cmd

我试图在批处理脚本中找到最大的4个数字,但它无法正常工作。

GTR命令未执行。

从这一行开始,它永远不会被执行if !Counter_Senior! gtr !Max_Age! (

我是批处理脚本的新手,我不确定对齐和间距。请帮帮我。

echo off
setlocal enabledelayedexpansion

set /a Counter_Child=1
set /a Counter_Senior=2 
set /a Counter_Older_adult=0
set /a Counter_Young_adult=3
set /a Max_Age=%counter_Child%

echo maximum age is %Max_Age%

if !Counter_Senior! gtr !Max_Age! (
    set Max_Age=%Counter_Senior%
    if !Counter_Older_adult! gtr !Max_Age! (
        set Max_Age=%Counter_Older_adult%
        if !%Counter_Young_adult! gtr !Max_Age! (
            set Max_Age=%Counter_Young_adult%
            time /t
            echo Maximum age is %Max_Age%
            goto:EOF
        )
    )
)

if !Counter_Older_adult! gtr !Max_Age! (
    set %Max_Age%=%Counter_Older_adult%
    if !%Counter_Young_adult! gtr !Max_Age! (
        set %Max_Age%=%Counter_Young_adult%
        echo Maximum age is %Max_Age% 
        goto:EOF
    )
) 

if !%Counter_Young_adult! gtr !Max_Age! (
    set %Max_Age%=%Counter_Young_adult%
    echo Maximum age is %Max_Age% 
    goto:EOF
)   

echo Maximum age is %Max_Age%

goto:EOF

3 个答案:

答案 0 :(得分:1)

您的代码似乎太复杂了。试试这个:

echo off
set Counter_Child=1
set Counter_Senior=2 
set Counter_Older_adult=0
set Counter_Young_adult=3
set Max_Age=%Counter_Child%
IF %Counter_Senior% GTR %Max_Age% SET Max_Age=%Counter_Senior%
IF %Counter_Older_adult% GTR %Max_Age% SET Max_Age=%Counter_Older_adult%
IF %Counter_Young_adult% GTR %Max_Age% SET Max_Age=%Counter_Young_adult%
echo maximum age is %Max_Age%

答案 1 :(得分:1)

如果您只想要四个Counter变量的最大值,那么您可以使用它:

For /F "Tokens=2 Delims==" %%A In ('Set Counter_'
) Do If %%A GEq !Max_Age! Set/A Max_Age=%%A

[编辑]
对于Anders建议的方案......

For %%A In (
    %Counter_Child% %Counter_Senior% %Counter_Older_adult% %Counter_Young_adult%
) Do If %%A GEq !Max_Age! Set/A Max_Age=%%A

答案 2 :(得分:0)

您的代码存在(至少)两个问题:

  • 您在goto:EOF内使用if并退出整个批处理文件。
  • 在某些地方,您错误地使用了set %Max_Age%=..而不是set Max_Age=..

您的代码也过于复杂,可以简化为MichaelS发布的答案之类的简单内容。

如果要在进行更改时打印特定信息,可以使用通用子过程:

@echo off
goto Start

:CheckAge 
setlocal enableextensions enabledelayedexpansion
set newage=!%1!
if %newage% gtr %Max_Age% (
    echo %1 is older than %Max_Age%, the new maximum is %newage%
    set Max_Age=%newage%
)
endlocal & set Max_Age=%Max_Age%
goto :EOF

:Start
set Counter_Child=1
set Counter_Senior=2
set Counter_Older_adult=0
set Counter_Young_adult=3
set Max_Age=0

call :CheckAge Counter_Child
call :CheckAge Counter_Senior
call :CheckAge Counter_Older_adult
call :CheckAge Counter_Young_adult
echo Maximum age is %Max_Age%