Datum vergleichen
Hallo Zusammen,
vielleicht kann mir jemand (wie schon öfters) mir bei einer Abfrage helfen.
Ich möchte gerne falls das Datum unter 10 ist fologende Abfrage Minus 1 machen.
z.B.: Aktuelles Datum: 03.08.2014 ergibt mit meiner momentaner Abfrage 0814 ich möchte aber Minus 1 d.h. 0714
if exist C:\Test\E_Mail\%date:~-7,2%%date:~-2%\ >>backup.txt echo C:\Test\E_Mail\%date:~-7,2%%date:~-2%\
Danke für eure Hilfe.
Mit freundlichen Grüßen
Klaus
vielleicht kann mir jemand (wie schon öfters) mir bei einer Abfrage helfen.
Ich möchte gerne falls das Datum unter 10 ist fologende Abfrage Minus 1 machen.
z.B.: Aktuelles Datum: 03.08.2014 ergibt mit meiner momentaner Abfrage 0814 ich möchte aber Minus 1 d.h. 0714
if exist C:\Test\E_Mail\%date:~-7,2%%date:~-2%\ >>backup.txt echo C:\Test\E_Mail\%date:~-7,2%%date:~-2%\
Danke für eure Hilfe.
Mit freundlichen Grüßen
Klaus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245453
Url: https://administrator.de/contentid/245453
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo Klaus20!
Etwa so (ungetestet):
Grüße
bastla
[Edit] @ rubberman: Was nutzt die eine oder andere Länge Vorsprung, wenn Kleinigkeiten wie
Etwa so (ungetestet):
@echo off & setlocal
set /a Jahr=%date:~-2%
set /a Monat=1%date:~-7,2%-1
if %Monat%==100 set "Monat=112" & set /a Jahr-=1
set "Vormonat=%Monat:~-2%%Jahr%"
bastla
[Edit] @ rubberman: Was nutzt die eine oder andere Länge Vorsprung, wenn Kleinigkeiten wie
~
in Zeile 2 (ist inzwischen korrigiert) auf der Strecke bleiben ... [/Edit]
Hallo Klaus,
Beispiele dafür gibt es hier zwar zuhauf, aber egal ...
Schwierigkeit hierbei:
- Zahlen mit vorangestellter 0 werden als oktale Zahlen interpretiert. 08 und 09 gibt es also nicht.
- Der Januar bildet einen Sonderfall.
Grüße
rubberman
EDIT: Hallo bastla, wie immer die Hasenlänge vorn
Beispiele dafür gibt es hier zwar zuhauf, aber egal ...
Schwierigkeit hierbei:
- Zahlen mit vorangestellter 0 werden als oktale Zahlen interpretiert. 08 und 09 gibt es also nicht.
- Der Januar bildet einen Sonderfall.
set /a "m = 1%date:~-7,2% - 1, y = 1%date:~-2%"
if %m%==100 set /a "m = 12, y -= 1"
echo %m:~-2%%y:~-2%
rubberman
EDIT: Hallo bastla, wie immer die Hasenlänge vorn
Hallo Klaus,
bei bastla fehlt schlicht die Tilde in Zeile 2.
Grüße
rubberman
bei bastla fehlt schlicht die Tilde in Zeile 2.
set /a Jahr=%date:~-2%
Hätte mir folgendes vorgestellt weiß nur nicht wie es zu realisieren ist. ...
@echo off & setlocal
setlocal EnableDelayedExpansion
if 1%date:~,2% lss 110 (
set /a "m = 1%date:~-7,2% - 1, y = 1%date:~-2%"
if !m!==100 set /a "m = 12, y -= 1"
set "myDate=!m:~-2!!y:~-2!"
) else set "myDate=%date:~-7,2%%date:~-2%"
endlocal &set "myDate=%myDate%"
echo %myDate%
pause
rubberman
Falls das Datum über 09 ist nimmt das Programm den aktuellen Monat ??
Richtig.Könntest Du mir was zum Aufbau sagen da es für mich alles Neuland ist ??
Ich versuch's mal mit Kommentaren...@echo off & setlocal
REM Innerhalb einer Kommandozeile oder eines (in Klammern eingefassten)
REM Blocks von Kommandozeilen wird eine Variable nur einmal zum Wert
REM expandiert und zwar noch bevor(!) die die Zeile ausgeführt wird.
REM Um das zu verhindern bedient man sich der "verzögerten Variablen-
REM erweiterung" und ersetzt in den betreffenden Variablen die
REM Prozentzeichen durch Ausrufezeichen.
setlocal EnableDelayedExpansion
REM In %date:~,2% finden sich die ersten beiden Zeichen (Tag) des
REM Datums. Die vorangestellte 1 forciert einen numerischen Vergleich
REM auch bei 08 und 09, wobei die 1 beim 2. Vergleichsoperanden
REM natürlich auch vorangestellt werden muss.
REM Ist also die Bedingung erfüllt, entspricht das deiner Vorgabe
REM dass der Tag kleiner als 10 ist.
if 1%date:~,2% lss 110 (
REM Mittels SET /A ist es möglich Berechnungen von ganzzahligen
REM Werten auszuführen. Man kann mehrere Operationen gleichzeitig
REM ausführen, wobei diese durch ein Komma getrennt werden müssen.
REM Auch hier stelle ich wieder eine 1 voran, um die Interpretation
REM als oktale Zahl zu verhindern. So wird beispielsweise aus der
REM (nicht erlaubten oktalen) Zahl 08, die Dezimalzahl 108.
set /a "m = 1%date:~-7,2% - 1, y = 1%date:~-2%"
REM Hier wird überprüft, ob es sich um den Januar handelt. Falls
REM ja, wurde oben aus 01 die 101 und durch die Subtraktion von 1
REM der Wert 100. In diesem Fall wird der Monat auf 12 gesetzt
REM und das Jahr um 1 vermindert.
if !m!==100 set /a "m = 12, y -= 1"
REM Da du die Werte zweistellig benötigst, werden nur die letzten
REM beiden Ziffern weiterverarbeitet. Die vorangestellte 1 wird
REM also wieder abgeschnitten, wodurch man auch Werte mit
REM vorangestellter 0 erhält.
set "myDate=!m:~-2!!y:~-2!"
REM Der "else" Zweig wird abgearbeitet wenn der Tag nicht kleiner
REM als 10 ist. Den Rest kennst du ja bereits ...
) else set "myDate=%date:~-7,2%%date:~-2%"
REM Diese Zeile ist ein Konstrukt, um die Variable myDate über
REM die Grenze der Subumgebung mit der verzögerten Variablen-
REM erweiterung zu retten.
endlocal &set "myDate=%myDate%"
echo %myDate%
pause
(Sorry ich weiß immer noch nicht wie man richtig formatiert)
Ganz unten auf jeder Seite gibt's den Link zur . Dort ist auch alles über Formatierungen erklärt.Grüße
rubberman
Hallo Klaus.
Hmm, das Script selbst hat eigentlich nix mit XP oder nicht XP zu tun (zumal du auch nicht schreibst was nicht funktioniert). Kann höchstens mit dem eingestellten Datumsformat zu tun haben.
Du kannst ja mal schreiben, was ein
bei dir unter XP ausgibt.
Alternativ teste mal was passiert wenn du für das Feststellen des Tages wie folgt arbeitest:
Grüße
rubberman
Hmm, das Script selbst hat eigentlich nix mit XP oder nicht XP zu tun (zumal du auch nicht schreibst was nicht funktioniert). Kann höchstens mit dem eingestellten Datumsformat zu tun haben.
Du kannst ja mal schreiben, was ein
echo %date%
bei dir unter XP ausgibt.
Alternativ teste mal was passiert wenn du für das Feststellen des Tages wie folgt arbeitest:
if 1%date:~-10,2% lss 110 (
rubberman
Hallo Klaus,
das Orakel von Delphi hat mir geflüstert, dass es auf Win7 auch funktionieren wird
Nochmal: Das ist keine Frage von XP oder Vista oder Win7 oder Win8.1 oder ...
Das Format des Datums ist in mehreren Registry-Einstellungen hinterlegt.
Sobald du versuchst mit dem Script auf einer amerikanischen Maschine zu arbeiten, ist schon wieder Ebbe weil schon allein die Reihenfolge eine andere sein wird. Es gibt verschiedene Möglichkeiten, mit bzw. unabhängig von solchen Einstellungen zu arbeiten.
Wenn es bei dir aber mit
Grüße
rubberman
das Orakel von Delphi hat mir geflüstert, dass es auf Win7 auch funktionieren wird
Nochmal: Das ist keine Frage von XP oder Vista oder Win7 oder Win8.1 oder ...
Das Format des Datums ist in mehreren Registry-Einstellungen hinterlegt.
HKEY_CURRENT_USER\Control Panel\International
Sobald du versuchst mit dem Script auf einer amerikanischen Maschine zu arbeiten, ist schon wieder Ebbe weil schon allein die Reihenfolge eine andere sein wird. Es gibt verschiedene Möglichkeiten, mit bzw. unabhängig von solchen Einstellungen zu arbeiten.
- Batch pur:
- Registry-Werte auslesen und auf dieser Basis das Datum parsen.
- WMIC (nicht auf allen XP Versionen dabei)
- MAKECAB (nicht ohne temporäre Datei)
- Einbeziehung anderer Sprachen (VBScript, JScript etc.)
Wenn es bei dir aber mit
%date:~-10,2%
funktionieren sollte, kannst du es auch dabei belassen ...Grüße
rubberman