我正在运行这个批处理程序,
@echo off
cls
set /a answer=2*1073741824
echo %answer%
pause>nul
输出正在获取,
-2147483648
预期产出,
2147483648
我面临的问题是输出返回负值,我不知道哪里出了问题。有哪些解决方案可以帮助我使用批处理解决此问题?
答案1
使用 PowerShell 助手批量计算大整数
1. 批次
本质上你可以...
在批处理脚本中将数学方程式设置为字符串变量,例如
SET "Calculation=2*1073741824"
MathType
为运算符类型设置字符串变量值,即*
。使用#1和#2批处理变量并将其插入小型 PowerShell 命令中,以使用批处理命令创建动态脚本
ECHO
。PowerShell 逻辑将分裂除每个数字部分外#1值并用数学运算符 (例如
*
) 因此每个都可以单独重复使用以在 PowerShell 中执行大数计算。最后,通过运行脚本的执行对于/f循环并将执行结果保存为批处理变量。这允许 PowerShell 执行
int
能够处理更多字节的大型算术计算,但也允许稍后将结果用作批处理中的字符串变量。
批处理脚本
SET "Calculation=3*1073741824"
SET "MathType=*"
SET PSScript=%temp%\PS~MathTemp.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO $Calculation = "%Calculation%" > "%PSScript%"
ECHO [int]$Calculation.split("%MathType%")[0] %MathType% [int]$Calculation.split("%MathType%")[1] >> "%PSScript%"
FOR /F "DELIMS=" %%I IN ('Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"') DO SET "nCalc=%%I"
ECHO %nCalc%
PAUSE
2. PowerShell
根据其他人的建议,我制作了一个简单的 PowerShell 脚本,它将通过传递两个参数来执行此操作......
- 简单的两个数字计算作为整个字符串(例如“
4 + 4
”,“823*7
”,“8 /2
”,...等)- 这算术运算符 、、或应始终与同一执行中使用的 #1 两个数字计算算术运算符
*
匹配/
+
-
PowerShell 脚本
$Calculation = $args[0];
$MathType = $args[1];
$p1 = [int]$Calculation.split($MathType)[0].Trim();
$p2 = [int]$Calculation.split($MathType)[1].Trim();
$cmd = "$p1 $MathType $p2";
Invoke-Expression -Command $cmd
执行示例
PS C:\WINDOWS\system32> & "C:\Scripts\PassCalc.ps1" "9 / 5 " "/"
1.8
更多资源
答案2
如果事情在微软 视窗 批处理文件预处理器,您可以随时使用微软 视窗 电源外壳集成 Shell 脚本环境或赛格威环境。
在后者中,您可以使用bc
软件实用程序。它可以执行高级计算。您可以将其与 Shell 脚本环境(例如重回谍影重重Shell 脚本环境并获得您想要的结果。
dobre@Laptop ~
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2*1073741824
2147483648
dobre@Laptop ~
$
答案3
为什么不隐藏起来-
在你的变量中%answer:-=%
:
@echo off & cls
set /a answer=2*1073741824
echo=%answer:-=% & pause>nul
rem :: you can remove from variable by ::
set "answer=%answer:-=%"
echo=%answer%