我试图在批处理脚本中找到最大的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
答案 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%