Batch exacte berekening

Status
Niet open voor verdere reacties.

gast0505

Gebruiker
Lid geworden
11 jun 2014
Berichten
206
Hallo,

Ik wil graag in een batch bestand een berekening maken, maar deze moet exact zijn. Ik wil het volgende:
Code:
set /a ans=%var%*1.6

Maar een getal als 1.6 werkt niet. Het programma zegt dat er een operator mist. Iemand een idee hoe dit werkt of misschien een programma die ik in dezelfde map kan zetten die hij dan kan gebruiken door het commando 'call'?

Alvast bedankt,

gast0505
 
Ik maak een spel, en in dit spel moet je tanken, dus uitgaande van een gemiddelde benzineprijs van 1,60 moet hij het aantal liters keer 1,60 doen. Het spel maak ik het liefst in bat, bovendien heb ik er al heel veel aan gedaan:confused:. Is er een mogelijkheid om een vb script in de map te zetten die het spel dan kan gebruiken door middel van call?

gast0505
 
Je kan uiteraard best de berekening in VB Script doen en de uitkomst terug laten geven, maar die heb je dan in het batch bestand weer als getal met cijfers achter de komma waar je vervolgens weer niks me kan doen.
 
Alleen het vb script moet de input (het getal waarmee vermenigvuldigt moet worden) uit het batch programma krijgen. hoe doe ik dit dan? En hoe geeft hij deze terug? Het maakt niet uit dat het met cijfers achter de komma is, de uitkomst wordt direct opgeslagen in een bestand. Later moet de speler weer tanken, dus het spel leest dit bestand weer, zal opnieuw dus het vb script erbij halen, en slaat de uitkomst weer op.
 
Voorbeeldje met Javascript. Doe dit eens in een batch file. LP is LiterPrijs en LT is LiTers:
Code:
@if (@CodeSection == @Batch) @then
    @echo off
    set JScall=Cscript //nologo //E:JScript "%~F0"
    set LP=1.60
    set LT=9.5
    for /F %%o in ('%JScall% %LT%*%LP%') do echo Totaalprijs = %%o
    goto :EOF
@end

// JScript section
WScript.Echo(eval(WScript.Arguments.Unnamed.Item(0)));
 
Laatst bewerkt:
Waar moet ik deze code plaatsen dan? Gewoon in de batch? en kan ik het aantal liters vervangen voor bijv. %var%? Hij moet namelijk als het kan met een variabele kunnen rekenen. En kan je me ook helpen met een script die kan aftrekken? en dan exact, met 2 getallen achter de komma (cent).
 
Het is gewoon een batch file die gebruik maakt van Java script. Je kan dus alles doen wat je normaal gesproken met een batch file kan doen.
Wat de berekeningen betreft, dat kan je lezen in deze regel die de getallen vermenigvuldigd:
for /F %%o in ('%JScall% %LT%*%LP%') do echo Totaalprijs = %%o

Dan is het al simpel om dat aan te passen of uit te breiden toch?
Je kan het ook overnemen in je eigen batch files.
 
Laatst bewerkt:
oh ja, gewoon het sterretje vervangen voor een andere operator! bedankt voor de hulp!
nog een laatste vraag: moet het stukje
Code:
// JScript section
WScript.Echo(eval(WScript.Arguments.Unnamed.Item(0)));
ook in de batch code?
 
Ja, dat is de aanroep van Java script. Anders gaat het niet werken ;)
 
Daar zou ik het wel laten staan, dan zit hij geen andere batch regels in de weg.
 
Hallo edmoor, kan je me nog helpen met 1 dingetje? Ik heb nu de volgende code:
Code:
@if (@CodeSection == @Batch) @then
    @echo off
    set JScall=Cscript //nologo //E:JScript "%~F0"
    for /f "tokens=*" %%a in ('type price.uf 2^>NUL') do set money_l=%%a
    for /f "tokens=*" %%a in ('type save\money.uf 2^>NUL') do set money=%%a    
    for /F %%o in ('%JScall% %money%-%money_l%') do echo %%o >> new_money.uf
    goto :EOF
@end

// JScript section
WScript.Echo(eval(WScript.Arguments.Unnamed.Item(0)));

Hij leest hier dus eerst het bestand tank.uf, waar de totaalprijs van de benzine in staat.
Daarna leest hij het bestand money.uf, die in de map save staat, en het geld dat de speler heeft bevat.
Daarna moet hij dus de prijs van de benzine aftrekken van het geld dat de speler heeft. Dit is in het begin 500 euro. Als de code uitgevoerd wordt moet hij dus de uitkomst in het bestand new_money.uf zetten. Maar als ik dit bestand open staat hier 500 in, oftewel hij heeft de prijs van de benzine niet afgetrokken? Wat gaat hier fout?

gast0505
 
Laatst bewerkt:
Geen idee zo op het eerste gezicht, maar als je die .uf bestandjes ook plaatst wil ik wel even kijken.
 
Helpmij zegt dat het een ongeldig bestand is, dus ik kan hem niet uploaden. Ik zeg het wel even: in price.uf staat gewoon de prijs van de benzine, bijvoorbeeld 100 euro, en in money.uf staat het geld van de speler, dus in dit geval 500 euro. Verder staat hier niks in.
 
Staat er dan exact 100 euro of alleen 100? En dan zal dat toch niet per liter zijn?
Of heb je een glazen bol? :p
 
Laatst bewerkt:
Nee er staat alleen 100. Nee heb dat even als test om te zien of het script werkt haha;) wat in price.uf staat is dus de totaalprijs van het aantal getankte liters, die is eerst in dit bestand gezet door hetzelfde soort script, die ik gister van je kreeg. Die werkt wel.
 
Laatst bewerkt:
Ik denk dat er iets met de gebruikte variabelen niet goed is, maar wat dat is kan ik ook niet vertellen. Deze geeft 400 als uitkomst:
Code:
@if (@CodeSection == @Batch) @then
    @echo off
    set JScall=Cscript //nologo //E:JScript "%~F0"
    for /f "tokens=*" %%a in ('type price.uf 2^>NUL') do set LT=%%a
    for /f "tokens=*" %%b in ('type money.uf 2^>NUL') do set LP=%%b
    for /f %%c in ('%JScall% %LP%-%LT%') do echo %%c >> new_money.uf
    goto :EOF
@end

// JScript section
WScript.Echo(eval(WScript.Arguments.Unnamed.Item(0)));
 
Haha nu zie ik het ineens, ik weet al wat er fout is denk ik. Hij laad dus de getallen uit de bestanden met deze code:
Code:
    for /f "tokens=*" %%a in ('type price.uf 2^>NUL') do set money_l=%%a
    for /f "tokens=*" %%a in ('type save\money.uf 2^>NUL') do set money=%%a

Bij beide gebruikt hij %%a, dus hier gaat het mis denk ik. Ik zal eens zien wat er gebeurt als ik dit verander.

EDIT: Ja, nu werkt hij wel haha! Ik vergeleek mijn code met de jouwe en toen zag ik het, dus bedankt voor de hulp!:thumb:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan