使用 PowerShell 助手批量计算大整数

使用 PowerShell 助手批量计算大整数

我正在运行这个批处理程序,

@echo off
cls
set /a answer=2*1073741824
echo %answer%
pause>nul

输出正在获取,

-2147483648

预期产出,

2147483648

我面临的问题是输出返回负值,我不知道哪里出了问题。有哪些解决方案可以帮助我使用批处理解决此问题?

答案1

使用 PowerShell 助手批量计算大整数

1. 批次

本质上你可以...

  1. 在批处理脚本中将数学方程式设置为字符串变量,例如 SET "Calculation=2*1073741824"

  2. MathType为运算符类型设置字符串变量值,即*

  3. 使用#1#2批处理变量并将其插入小型 PowerShell 命令中,以使用批处理命令创建动态脚本ECHO

  4. 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 脚本,它将通过传递两个参数来执行此操作......

  1. 简单的两个数字计算作为整个字符串(例如“ 4 + 4”,“ 823*7”,“ 8 /2”,...等)
  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%


相关内容