问题
在批处理文件中,有没有一种方法可以将一个变量 "乘方" 一个数字或其他变量?是否存在此类函数?例如,在Python中,您可以使用**
表示 "乘方"。
编辑
您可以在批处理文件中进行数学计算... http://en.wikipedia.org/wiki/Batch_file
在批处理文件中,有没有一种方法可以将一个变量 "乘方" 一个数字或其他变量?是否存在此类函数?例如,在Python中,您可以使用**
表示 "乘方"。
您可以在批处理文件中进行数学计算... http://en.wikipedia.org/wiki/Batch_file
从答案中你可能已经发现,在批处理中没有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%
另一种选择是使用这个答案中描述的方法。
你没有太多的数学函数/运算符可供使用,也没有适当的循环,因此需要模拟这些。
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我非常喜欢@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位限制)的数字。
最好!
@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的解决方案。
SET /?
将为您提供批处理脚本支持的完整算术操作列表。 - Andriy M