Forum: PC-Programmierung Frage an die Batch-ler


von tex (Gast)


Lesenswert?

Hallo Forum
ich kann mit

set jetzt=%date:~-10,2%.%date:~-7,2%.%date:~-4%

eine variable mit dem Inhalt des Dtaums in der form 15.09.2016 erzeugen
Mit

for /R Z:\Backup %%i IN (*.*) Do echo %%~ti

kann ich von jeder Datei das Datum anzeigen, welches in der Form 
TT.MM.JJJJ SS:MM ausgeliefert wird. Wie aber bekomme ich es hin, das 
Datum in einer Variablen abzulegen, um es zum Vergleich mit "jetzt" 
seiner letzten 6 Stellen zu berauben bzw, geht es auch, die 
überzählichen Stellen bei %%~ti gelich abzuschneiden  :~-6%   ???

von ugosna (Gast)


Lesenswert?

Man könnte ausnutzen, dass Datum und Uhrzeit mit einem Leerzeichen 
getrennt sind. Beim Aufruf einer "Funktion" ergibt das zwei getrennte 
Parameter.
1
@echo off
2
@setlocal enableextensions, EnableDelayedExpansion
3
4
rem set jetzt=%date:~-10,2%.%date:~-7,2%.%date:~-4%
5
set jetzt=%date:~-4%%date:~-7,2%%date:~-10,2%
6
rem echo %jetzt%
7
8
for /R .\ %%i IN (*.*) Do (
9
  call :formdat %%~ti
10
  echo %jetzt% - !fdate! %%~ti
11
)
12
goto :eof
13
14
:-----------------------
15
:formdat
16
set fdate=%1
17
set fdate=!fdate:~-4!!fdate:~-7,2!!fdate:~-10,2!
18
rem echo x %1 %2 !fdate!
19
20
goto :eof

Ich habe auch die Formatierung des Datums auf YYYYMMDD geändert, da 
meiner Meinung nach Vergleiche damit einfacher sind.
1
F:\test>dateb.cmd
2
20160916 - 20131219 19.12.2013 21:27
3
20160916 - 20160906 06.09.2016 18:40
4
20160916 - 20160831 31.08.2016 23:12
5
20160916 - 20160901 01.09.2016 05:48
6
20160916 - 20160901 01.09.2016 05:47

von Rainer V. (rudi994)


Lesenswert?

Hier noch einer:
1
@echo off
2
setlocal EnableExtensions, EnableDelayedExpansion
3
for /R .\ %%i in (*.*) do (
4
    echo FName: %%i
5
    call :splitdate %%~ti
6
    pause
7
    echo.
8
)
9
goto ende
10
11
:---------
12
:splitdate
13
set "dtmp=%1 %2"
14
set datum=%dtmp:~0,10%
15
set jetzt=%date%
16
echo FTime: %dtmp%
17
echo Datum: %datum%
18
echo Form1: %datum:~0,2%. Tag, %datum:~3,2%. Monat im Jahr %datum:~6,4%
19
echo Form2: %datum:~-10,2%. Tag, %datum:~-7,2%. Monat im Jahr %datum:~-4,4%
20
echo Jetzt: %jetzt%
21
if /i "%jetzt%" == "%datum%" (
22
    echo Jetzt == Datum : Ist gleich
23
) else (
24
    echo Jetzt == Datum : Ist nicht gleich
25
)
26
goto :eof
27
28
:ende
29
endlocal
30
exit

: Bearbeitet durch User
von tex (Gast)


Lesenswert?

Erst mal vielen Dank.
Ich werde mal schauen, wie weit ich damit komme.

von sebastian (Gast)


Lesenswert?

tex schrieb:
> set jetzt=%date:~-10,2%.%date:~-7,2%.%date:~-4%

Warnung: Sowas geht schief wenn es mal ein Kollege mit anderssprachigem 
Windows ausführt. Ging auch schief bei Windows 2000 -> Windows XP, kann 
also in Zukunft auch bei gleicher Sprache nochmal passieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.