批处理文件中是否存在“Power to”功能?(指数)

3

问题

在批处理文件中,有没有一种方法可以将一个变量 "乘方" 一个数字或其他变量?是否存在此类函数?例如,在Python中,您可以使用**表示 "乘方"。

编辑

您可以在批处理文件中进行数学计算... http://en.wikipedia.org/wiki/Batch_file


http://en.wikipedia.org/wiki/Batch_file - avitex
1
实际上,从命令提示符中发出 SET /? 将为您提供批处理脚本支持的完整算术操作列表。 - Andriy M
4个回答

5

从答案中你可能已经发现,在批处理中没有power to函数可用。

一个选项是使用循环。您可以像@Kirk Broadhurst上次在批处理中执行时所做的那样进行循环,或者您可以使用另一种方式,这种方式自那时以来已经变得可用,或者Kirk可能没有注意到:

:: calculate x^n
SET x=3
SET n=5
SET result=1
FOR /L %%i IN (1,1,%n%) DO SET /A result*=x
ECHO %result%

另一种选择是使用这个答案中描述的方法。


我以前从未见过这样的东西,非常不错。 - Kirk Broadhurst

1

你没有太多的数学函数/运算符可供使用,也没有适当的循环,因此需要模拟这些。

x^n 的基本算法

result = 1
for (i = 0 ; i < n; i++)
{
    result = result * x;
}

在批处理文件中,您需要使用goto语句而不是真正的循环。
set result=1
set i=1
:multiply
set /a result=result*x
set /a i=i+1
if %i% lss %n% goto multiply

这对于非整数或负/零指数是行不通的,但你可以解决这个问题。


在批处理文件中,您还需要使用带有赋值的 SET 命令,并且等号周围不能有空格。 - Andriy M
这是真的;我已经很久没有使用批处理文件了。我试图帮助解决模式问题,而不是语法。 - Kirk Broadhurst
@Kirk:对不起,我刚才说话有点粗鲁了。我已经为你修改了语法,希望你不介意。 - Andriy M
当然不是,这就是编辑功能的作用;)这样可以避免我必须弄清楚语法应该是什么。 - Kirk Broadhurst

0

我非常喜欢@Andriy的答案,但我想加一点东西使它成为可重复使用的函数。

@echo off

CALL :pow 2 3    :: 8
CALL :pow 3 3    :: 27
CALL :pow 5 5    :: 3125
CALL :pow 256 3  :: 16777216

set /p=End of Script, press any key to exit...
GOTO :EOF

:: ----- Call Functions -----
:pow
    SET pow=1
    FOR /L %%i IN (1,1,%2) DO SET /A pow*=%1
    ECHO %pow%
GOTO :EOF

另外,您还可以将“函数”放在文件中(例如“pow.bat”,使用方式只需为“pow n n”),并以这种方式调用它们,这可能很方便(特别是如果您开始使用路径变量)。我一直认为在批处理中创建可重用函数是最酷但最不知名的“功能”。此外,您将能够在脚本中使用变量%pow%(或将其分配给另一个变量),直到再次调用该函数覆盖为止。

我想要提出的最后一点是,虽然这是一个有趣的练习,但批处理存在精度限制。我发现批处理无法正确计算大于2 ** 31(32位限制)的数字。

最好!


0
@echo off

:start
echo Set the value of the Base 
set x=
set /p x=
echo set the power the Base is raised to 
set n= 
set /p n=
set y=%x%
If %n%==0 goto sol1
If %n%==1 goto solx
set /a n=%n%-1
set p=0

:eloop
set p=%P%
set /a p=%P%+1
set /a y=%y%*%x%
If %P%==%n% goto sol
goto :eloop

:sol1
set y=1
echo %y%
pause
goto :start

:solx
set y=%x%
echo %Y%
pause
goto start

:sol
set y=%y%
echo %y%
pause
goto start

这段代码适用于您选择的所有正整数,您需要先选择底数,然后选择指数,将底数提高到指数,然后通过将变量p加1多次循环表达式,直到它与变量n匹配,每次将x乘以自身,然后给出解决方案,它还为n=1和n=0时分别给出了%x%和1的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接