florengray
Goto Top

Zeitausgabe ohne vorangestellete Null

Hallo,
ich hab schon den Beitrag mit dem Datum gelesen, aber das half mir nicht weiter.

Ich möchte in meinem Schnipsel so etwas wie eine Skriptlaufzeit einbringen.
Dafür muss ich aber mit "Zeit" rechnen.

Mein set /a meckert aber, wenn es z.B. mit 12-08 rechnen muss.

mein Schnipsel: (nur´n Testausschnitt)

set mm1= %time:~9,2%
rem Dazwischen vergeht aber noch Zeit. Nur hier im Testschnipsel nicht.
set mm2= %time:~9,2%


set /a a= %mm2%-%mm1%

echo %a%

Da kommt manchmal so was wie: 1,-69 obwohl da eigentlich 0,irgendwas stehen müsste.

Kann mir da jemand helfen???

Content-Key: 65200

Url: https://administrator.de/contentid/65200

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: Biber
Biber 31.07.2007 um 23:25:50 Uhr
Goto Top
Moin florengray,

im Moment ist es etwas schwierig, auf < code >-Beispiele hier im Forum zu verweisen...
Die meisten werden (vorübergehend) nicht angezeigt wegen dieses ärgerlichen Bugs.

Deshalb würde ich Dich gern mal in ein anderes nettes Forum verweisen:
BatchSkript unter Windows XP/2003 - Knobelaufgabe im MCSEBoard.

Dort ist sowohl dieses "Set /a wirft-Fehler- bei 08/09"-Phänomen beschrieben wie auch Umgehungsstrategien.
Und vor allem auch der Hinweis, das Datumsberechnungen mit CMD.exe-Mitteln und "Set /a" nur Dönekens sind.

Lies dich bitte in den genannten Thread ein - den Rest klären wir dann hier.

Grüße
Biber
Mitglied: florengray
florengray 02.08.2007 um 10:46:31 Uhr
Goto Top
Hallo,
der Link is nicht schlecht.
Nur ich bin noch nicht so fit in Batch! Ich verstehe nicht, was das heißt :~9,2.
Was genau tut jedes Zeichen dort???
Den Syntax habe ich mir von hier kopiert.
Ich bin nur´n Amateur Batcher!!!!
Kannste mir vielleicht erklären was dieser Syntax bedeutet?
Dann klärt sich auch mit Sicherheit, wie ich mein Problem lösen kann.

florengray
Mitglied: Biber
Biber 02.08.2007 um 11:48:06 Uhr
Goto Top
Moin florengray,

diese kryptische Syntax "set mm2= %time:~9,2%" ist nur die CMD-Syntax für eine SubString-Funktionalität.

Am einfachen Beispiel:
Set myVar=test0815
### Der Variablen myvar wir der String "test0815" zugewiesen  
echo myVar
### würde "myVar" (genau diesen 5-Zeichen-String) anzeigen  
echo %myvar%
### würde "test0815" anzeigen  

jetzt einen Substring davon:
a) vom Beginn an (=0) die ersten 4 Zeichen -->Ergebnis "test"
echo %myvar:~0,4%
test
b) vom Ende an die letzten 4 Zeichen
>echo %myvar:~-4%
0815

Von der aktuellen Zeit (steht IMMER in der Variablen %time% OHNE Dein Zutun) vom 10. Zeichen an 2 Stellen rausflöhen:
>echo Zeit: %time% und jetzt von Zeichen 10 an 2 Stellen: %time:~9,2%
Zeit: 11:47:35,20 und jetzt von Zeichen 10 an 2 Stellen: 20
>echo Zeit: %time% und jetzt vom Ende an minus 13 Zeichen 2 Stellen: %time:~-13,2%
Zeit: 11:52:38,19 und jetzt vom Ende an minus 13 Zeichen 2 Stellen: 11

Bitte spiele es mit Deinen Uhrzeit-Einstellungen mal am heimischen CMD-Prompt durch.

Grüße
Biber
Mitglied: florengray
florengray 02.08.2007 um 12:12:43 Uhr
Goto Top
Hallo,
ja das ist genau das was ich wissen wollte! Vielen Dank!
Ich werd es ausprobieren!

Da wir gerade mit Umzug beschäftigt sind, kann es eine Weile dauern bis mein nächster Beitrag kommt!
Also nicht als abgeschlossen ansehen!
Bis bald

florengray
Mitglied: florengray
florengray 02.08.2007 um 21:02:32 Uhr
Goto Top
Hallo
Rechner noch nicht abgebaut!
Eine Frage hab ich noch. Das mit dem Zeit hab ich im Griff!
Wie kann ich z.B. 2839 Millisekunden auf normale Sekunden mit Komma umrechnen?
Ich hab versucht:
set /a laufzeit= %a%/100
--> geht nicht. Kommt nur 0. sollte aber z.B. 0,34 Sekunden kommen.
set /a laufzeit= %a%/0,01
--> geht auch nicht
set /a laufzeit= %a%*(1/100)
--> geht auch nicht
ich hab noch versucht ihm Potenzen beizubringen, aber ich merke, dass er mit den Nachkommastellen ab 0,... nicht zurechtkommt.

Ist das mit Batch realisierbar?
Wenn ja wie?
Freue mich auf Antwort!

Aber Danke schon mal für das mit der Zeit!!!!
Mitglied: Biber
Biber 02.08.2007 um 23:32:57 Uhr
Goto Top
Moin florengray,

ein bisschen verwirrt mich Dein Algorithmus schon mit 2839 Millisecs sind 0,34 sec ?!?.

Na ja, die Mathematik hat sich sicherlich auch weiterentwickelt seit meiner Schulzeit...*seufz*

Aber um auf zwei Teilfragen eine Antwort zu versuchen.

1. Ja, in der Tat: Auf der M$-Shell, also am CMD-Prompt gibt es nur Integer-Quasi-Zahlen.
Keine Nachkommastellen.
Und entsprechend käme bei 50 / 100 nicht 0,5 heraus, sondern 0.
Nicht abgerundet, sondern abgeschnitten.
Ein set /a 999/1000 am CMD-Prompt ergibt 0 und nicht etwa 1 (was 0,999 ja nahelegen würde)
> Das ist nicht dumm oder blöd oder ärgerlich, sondern das ist einfach so.
Da wir das jetzt alle wissen, dass das nun mal ein reproduzierbares Verhalten bei Verwendung dieses Werkzeugs ist, können wir dementsprechend vorbeugen.

2. Zweite Teilfrage "Ist das mit Batch realisierbar?" --> Alles außer Brotschneiden geht per Batch.

Beispiel:
:: ----Snipp CalcMSecs.bat
@echo off & setlocal
If [%1]== %0 422839
REM entweder mit Parameter: 123456 [mSec] aufrufen...
REM ohne Parmater wird als willkürliches Beispiel 422839 genommen
Set /a "ms=%1"   
for /f %%i in ('set /a "ms/60000"') do (  
    for /f %%j in ('set /a "ms %% 60000 / 1000"') do (  
      For /f %%k in ('set /a "ms %% 1000"') do (  
        echo %ms% Millisec sind %%i Min %%j,%%k Sec
))) 

Demo am CMD-Prompt:
(=23:31:27  D:\temp=)
>e:\Schnipsel\CalsMsecs.bat 333333
333333 Millisec sind 5 Min 33,333 Sec

(=23:31:28  D:\temp=)
>e:\Schnipsel\CalsMsecs.bat 654321
654321 Millisec sind 10 Min 54,321 Sec

So, und nun mach erst Deinen Umzug fertig.... es gibt Wichtigeres im Leben als Bätche.. face-wink

Grüße
Biber