我需要找到最小的数字并在bat中打印最小的和其他的

问题描述 投票:0回答:2

我需要编写一个接受三个参数的bat文件。在这三个参数中,找到最小的一个,然后在屏幕上显示从 1 到 AND 最小参数的所有数字。 我试过了,但不起作用

@ECHO OFF
set /a c=%1
set /a b=%2
set /a a=%3

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
batch-file
2个回答
0
投票

这就是我会做的方式:

@echo off
setlocal

set /A c=%1, b=%2, a=%3
set /A "comp=((a-b)>>31)+1,one=!comp*a+comp*b,comp=((one-c)>>31)+1,Smallest=!comp*one+comp*c"

echo Smallest: %Smallest%
for /L %%i in (1,1,%Smallest%) do echo %%i

也就是说,如果 a > b,则

(a-b)
为正或零(否则为负),并且
(a-b)>>31
为零(否则为 -1,因为
>>
是 31 位的 signed shift) )所以最终如果
a > b
((a-b)>>31)+1 为 1,或者如果 a < b 则为零。这样我们就用这个值
comp
得到b,或者不用这个值
!comp!
得到a;并将两者中较小的一个存储在
one
变量中。

同样的方法可以得到

one
c
中较小的一个。

最后,我们显示从 1 到较小的所有值...


0
投票

这是本作业的示例代码,如果最小数不小于

1
,则输出最小数以及从
1
到最小数的所有数字。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "Smallest=%~1"
if not defined Smallest goto OutputHelp
if "%~2" == "" goto OutputHelp

for %%I in (%*) do if %%~I LSS %Smallest% set "Smallest=%%~I"
echo The smallest number is: %Smallest%
echo(
if %Smallest% GEQ 1 (
    for /L %%I in (1,1,%Smallest%) do echo %%I
) else (
    for /L %%I in (1,-1,%Smallest%) do echo %%I
)
goto EndBatch

:OutputHelp
echo %~nx0 must be run with at least two integer numbers as arguments.
echo(
echo Example: %~nx0 489 0x2AF 0715
echo(
echo    An integer number beginning with 0x is interpreted hexadecimal.
echo    An integer number beginning with 0 is interpreted as octal number
echo    which cannot contain the digits 8 and 9 to be valid. An invalid
echo    octal number is interpreted with value 0.
echo(
echo    There is not checked if an argument string is a valid string for
echo    a decimal, hexadecimal or octal integer number in the value
echo    range -2147483648 to 2147483647 (32 bit signed integer).

:EndBatch
echo(
pause
endlocal

使用示例中的三个数字运行此批处理文件的输出,而不输出从

1
到最小数字的所有数字是:

The smallest number is: 0715

八进制数

0715
是十进制数
461
,十六进制数
0x2AF
是十进制数
687
,这使得八进制数
0715
是最小的数。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • call /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • set /?
  • setlocal /?

我建议还阅读:

© www.soinside.com 2019 - 2024. All rights reserved.