# Stunde verwenden



## Bitbull (3. März 2010)

Hallo erst mal . . .

ich möchte in einer Batchdatei abhängig von der Zeit eine Datei mit einer bestimmten Endung versehen

von 7-13 = F
von 13-21 = S
sonst N

einiges habe ich mir zusammengesucht - aber mit set= xx geht das sooooo nicht:

set stunde=%time:~11,2%
if %stunde% GTR 14 set stunde=S   

Die zu speichernde Datei soll am Ende 

FOR /F "tokens=1,2,3 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b%%a
echo %cdate%

201000303F.xls heißen


;-)

vielen Dank für eure Mühen


----------



## Biber2 (3. März 2010)

Moin Bitbull,

vielleicht wäre es ja hilfreich, wenn du beiläufig mal postest, wie denn auf deinem Rechner (oder auf dem, der dem Batchskript als Wirt dienen soll) die Ausgabe von "echo %time%" am CMD-Prompt aussieht.

Auf meinem Rechner (dt. Win XP Prof SP3) und mit meinen regionalen Datums/Zeiteinstellungen würde herauskommen

```
>echo %time% set stunde=%time:~0,2%
17:02:36,23 set stunde=17
```

Du scheinst aber von einem spätphönizischem Zeitformat auszugehen... mit Stunden ab Position 12 in Länge 2....

Grüße
Biber


----------



## Bitbull (3. März 2010)

Hallo erst mal . . .

die echo %time% Geschichte hatte ich heute mittag aus dem Netz und es kommt nicht viel dabei raus, da es bei dem Artikel um die 2-stellige Darstellung aller Stunden ging. Ich habe das Original nicht weiter probiert.

Aber schon mal vielen, vielen Dank


----------



## Biber2 (3. März 2010)

Moin Bitbull,

ich verstehe deinen Kommentar nicht - anscheinend geht es dir mit meinem ähnlich.
Das wäre doch schon mal eine erste Gemeinsamkeit. Darauf können wir doch aufbauen.

Also nochmal meine Bitte:

Wie bitte ist auf dem Rechner, auf dem dieses Batchfragment laufen soll, die Ausgabe von

```
Echo %time%
```

a) bei Stunden, die zweistellig sind
b) bei Stunden, die < 10 sind? Hat die Anzeige eine führende "0", e.g. "07:33:22,11" oder ein Blank (" 7:33:33,11") oder
c) sieht es ganz anders aus?

Ich versuche es mal anders zu formulieren...
Sogar der allseits beliebte Dr.House hat irgendwie eine relativ konkrete Vorstellung von den Inne- oder Schweinereien, die er kunstvoll zerlegen soll.
Das sollten wir doch auch bei Stringzerlegungen in niederen Skriptsprachen ebenfalls an den Anfang jeglicher Seziererei stellen, oder?

Grüße
Biber


----------



## Bitbull (3. März 2010)

Hallo Biber

so ist das, wenn man über die gleiche Sache redet und sich trotzdem nicht versteht. 

Als ich es probiert habe war es schon 16:33:12,11 und ich mache normal um 16:00h Feierabend.  

Ich weiß aber nicht warum es wichtig ist, ob da "7" oder " 7" steht . . .


----------



## Biber2 (3. März 2010)

Moin Bitbull,


Bitbull hat gesagt.:


> Ich weiß aber nicht warum es wichtig ist, ob da "7" oder " 7" steht . . .



Du hast doch vor, irgendwelche Stunden vor 7h morgens der Nacht zuzuordnen und Stunden ab 7h-13h der Frühstücksschicht.

Deshalb wüsste ich schon gerne, gegen welchen String ich vergleichen muss bei der Anzeige von "Uhrzeit kurz nach 7h morgens"

Beispiel am CMD-Prompt: (das führende ">" ist mein Prompt, nicht mit eingeben)

```
>set "mytime1=07:02:36,23"
>set "mytime2= 7:02:36,23"

>echo %mytime1% set stunde=%mytime1:~0,2%
07:02:36,23 set stunde=07

>echo %mytime2% set stunde=%mytime2:~0,2%
 7:02:36,23 set stunde= 7
```

--> wie hoffentlich zu erkennen ist, ist der Wert von %Stunde% mal "07" , mal " 7".
Und den willst du doch verglichen haben mit GTR oder GEQ oder sonst einem Vergleichsoperator.

Oder hab ich jetzt was verpasst?

Grüße
Biber


----------



## Biber2 (4. März 2010)

Moin bitbull,

es hat ja keinen Sinn, hier länger den Betrieb aufzuhalten.
Versuch es anhand dieser Skizze:

```
:: --------Snipp EndungMitZeitundSchicht.cmd
::von 7-13 = F
::von 13-21 = S
::sonst N
@echo off & setlocal
If NOT "%~1"=="" set "time=%~1"
Set "stunde=%time:~0,2%"
Set "stunde=%stunde: =0%"
Set "Schichtkz=N"
if "%stunde%" GEQ "07" if "%stunde%" LEQ "13" Set "schichtkz=F"
if "%stunde%" GEQ "13" if "%stunde%" LEQ "21" Set "schichtkz=S"


FOR /F "tokens=1,2,3 delims=/. " %%a in ("%date%") do set CDATE=%%c%%b%%a
echo Dateiendung bei %date% %time%: [%cdate%%schichtkz%]
:: --------Snapp EndungMitZeitundSchicht.cmd
```

Testen des Schnipsels vom CMD-Prompt aus

```
(= 9:09:59  D:\temp=)
>set "testzeiten= " 3:04:33,22" " 8:51:42,46"  "18:51:42,46"  "12:51:42,46""

> For %i in ( %testzeiten%) do @call e:\schnipsel\EndungMitZeitundSchicht.cmd %i
Dateiendung bei 04.03.10  3:04:33,22: [100304N]
Dateiendung bei 04.03.10  8:51:42,46: [100304F]
Dateiendung bei 04.03.10 18:51:42,46: [100304S]
Dateiendung bei 04.03.10 12:51:42,46: [100304F]
```

Grüße
Biber


----------



## Bitbull (4. März 2010)

Hallo und besten Dank,


genau so hab' ich es jetzt in Gebrauch.


S uuuuuu p e r - Danke
´


----------



## Biber2 (4. März 2010)

Moin bitbull,

okay, jetzt werde ich zwar nie erfahren, wie denn bei dir nun Zeiten vor 10h morgens angezeigt werden...

Aber was soll's... in der IT und im richtigen Leben kann man/frau ja nicht immer alles haben.

Freut mich aber, dass es geklappt hat.

Grüße
Biber


----------



## Bitbull (4. März 2010)

Hallo Biber

nocmals besten Dank . . .  

meine Zeiten werden einstellig angezeigt - also ohne führendes Leerzeichen. 
Du hattest die Lösung gerade gepostet als ich antworten wollte. Da war mir die Umsetzung lieber als die Antwort.  

besten Grüße aus dem Rheinland 

p.s.

hatte dann noch ein 'kleines' Problem mit GOTO zu lösen. Erst als ich den Befehl GOTO komplett mit Großbuchstaben geschrieben hatte, ging es.

Ob mir das jemand erklären kann . . .


----------

