Kann man mit CMD rechnen?
1 Antwort
Rechnen mit Batch ist in der Regel keine Vergnügen.
Batch kann (ohne Hilfsmittel) nur mit ganzen Zahlen von -2147483648 bis 2147483647 rechnen. sowohl Eingaben, wie auch Ergebnisse müssen in diesem Bereich liegen, sonst gibt es Fehlermeldungen.
demo1.cmd
@echo off
set /a "result= 25*6"
echo %result%
set /a "result+= 7"
echo %result%
set /a "result/=100"
echo %result% das kann nint stimmen!
pause
Hat man große Zahlen oder benötigt man genaue Ergebnisse muss man mit Hilfsprogrammen arbeiten , welche diesen Einschränkungen nicht unterliegen:
simpleCalcJS.cmd
@echo off
rem JavaScript Hilfsprogramm schreiben
if not exist "%temp%\calc.js" echo var Formel='';for (var i = 0; i ^< WScript.Arguments.Length;i++){Formel=Formel+WScript.Arguments(i)};WScript.Echo(eval(Formel)) >"%temp%\calc.js"
rem Macro für den Aufruf des Javascript definieren
set m_calc= cscript /nologo "%temp%\calc.js"
rem testaufruf (einfach zur Demo)
%m_calc% (5.666+222)/77
set "Radius=22"
echo der Radius eines Kreises sei:22
rem Ergebniss eienr Variable zuweisen
for /f "tokens=1* delims=," %%a in ('%m_calc% 2 * Math.PI * %radius%') do (
if "%%b"=="" (set "__result=%%a"
) else (set "__result=%%a,%%b")
)
echo Der Umfang ist: %__result%
echo:
set "Formel=1/3/3/2*4"
for /f "tokens=1* delims=," %%a in ('%m_calc% %Formel%') do (
if "%%b"=="" (set "__result=%%a"
) else (set "__result=%%a,%%b")
)
echo %Formel% = %__result%
pause
exit /b
Damit lernst Du auch die fiese Fratze von Batch kennen, den Commandloop. Dieser ist die einzige Möglichkeit die Ergebnisse anderer Kommandozeilenprogramme an Batchvariablen zu übergeben.
Wenn ich Dir einen guten Rat geben kann, vergiss das altbackene komplizierte Batch und geh mit der Zeit. Powershell ist die (nicht mehr ganz) neu Scriptsprache von Windows. Es kann alles was Batch auch kann nur viel besser. Zudem ist es ebenso mächtig wie C# (nur das man keinen Compiler benötigt).
primzahlen.ps1
using namespace System.Collections.Generic
#variante des Sieb des Eratosthenes ...
# #1 bis 3 sind ohnehin Primzahlen
1..3 | %{Write-Host " $_ Primzahl"}
[List[int]]$PrimeList = 3
$stopwatch = [system.diagnostics.stopwatch]::StartNew()
for ($i=$PrimeList[0]+2 ; $i -le 1000000; $i+=2){
$BreakNum=[Math]::Sqrt($i)
foreach ( $prim in $PrimeList ) {
if ( $prim -gt $BreakNum ) {
$i
$Null=$PrimeList.Add($i)
break
}
if ( !($i % $prim) ) {
break
}
}
}
$stopwatch.Stop()
'{0:g} fuer {1} Primzahlen'-f $stopwatch.Elapsed,$PrimeList.count
pause