Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datum vergleichen

Frage Entwicklung Batch & Shell

Mitglied: Klaus20

Klaus20 (Level 1) - Jetzt verbinden

03.08.2014, aktualisiert 16:02 Uhr, 1229 Aufrufe, 11 Kommentare, 5 Danke

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
Mitglied: bastla
03.08.2014, aktualisiert um 20:42 Uhr
Hallo Klaus20!

Etwa so (ungetestet):
01.
@echo off & setlocal 
02.
set /a Jahr=%date:~-2% 
03.
set /a Monat=1%date:~-7,2%-1 
04.
if %Monat%==100 set "Monat=112" & set /a Jahr-=1 
05.
set "Vormonat=%Monat:~-2%%Jahr%"
Grüße
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]
Bitte warten ..
Mitglied: rubberman
LÖSUNG 03.08.2014, aktualisiert um 16:02 Uhr
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.

01.
set /a "m = 1%date:~-7,2% - 1, y = 1%date:~-2%" 
02.
if %m%==100 set /a "m = 12, y -= 1" 
03.
echo %m:~-2%%y:~-2%
Grüße
rubberman

EDIT: Hallo bastla, wie immer die Hasenlänge vorn
Bitte warten ..
Mitglied: Klaus20
03.08.2014 um 16:23 Uhr
Hallo bastla,
erst mal vielen Dank für Deine Hilfe.
Habe versucht Deinen Vorschlag im CMD Fenster auszuprobieren
%date:-2%
...Syntax falsch
%date:~-7,2%-1
Der Befehl "08-1" ist entweder falsch oder konnte nicht gefunden werden

Wäre schön wenn Du mir noch etwas auf die Sprünge helfen könntest.

Hallo rubberman,
auch Dir vielen Dank für Deine Hilfe.
Habe auch diverse Beispiele gefunden nur leider für mich (ungeübten) ohne Ergebnis.
Brauche aber unbedingt die vorangestellte 0.

Folgende Befehle liefern mir zwar die richtigen Werte aber ich weiß nicht wie ich sie weiterverarbeiten kann.
%date:~-0,2%
"03"
%date:~-7,2%
"08"
%date:~-2%
"14"

Hätte mir folgendes vorgestellt weiß nur nicht wie es zu realisieren ist.
*
If %date:~-0,2% < 10
%date:~-7,2% -1
else
%date:~-7,2%
endif
*

Grüße

Klaus
Bitte warten ..
Mitglied: rubberman
LÖSUNG 03.08.2014, aktualisiert um 18:48 Uhr
Hallo Klaus,

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. ...
01.
@echo off & setlocal 
02.
 
03.
setlocal EnableDelayedExpansion 
04.
if 1%date:~,2% lss 110 ( 
05.
  set /a "m = 1%date:~-7,2% - 1, y = 1%date:~-2%" 
06.
  if !m!==100 set /a "m = 12, y -= 1" 
07.
  set "myDate=!m:~-2!!y:~-2!" 
08.
) else set "myDate=%date:~-7,2%%date:~-2%" 
09.
endlocal &set "myDate=%myDate%" 
10.
 
11.
echo %myDate% 
12.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: Klaus20
03.08.2014 um 18:58 Uhr
Hallo rubberman,
vielen Dank - klappt wunderbar.
Könntest Du mir was zum Aufbau sagen da es für mich alles Neuland ist ??
Falls das Datum über 09 ist nimmt das Programm den aktuellen Monat ??

So ist nun meine aktuelle Abfrage (Sorry ich weiß immer noch nicht wie man richtig formatiert):

if exist C:\Test\E_Mail\%myDate%\ >>backup.txt echo C:\Test\E_Mail\%myDate%\

Grüße

Klaus
Bitte warten ..
Mitglied: rubberman
03.08.2014 um 19:38 Uhr
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...
01.
@echo off & setlocal 
02.
 
03.
REM Innerhalb einer Kommandozeile oder eines (in Klammern eingefassten) 
04.
REM  Blocks von Kommandozeilen wird eine Variable nur einmal zum Wert 
05.
REM  expandiert und zwar noch bevor(!) die die Zeile ausgeführt wird. 
06.
REM  Um das zu verhindern bedient man sich der "verzögerten Variablen- 
07.
REM  erweiterung" und ersetzt in den betreffenden Variablen die 
08.
REM  Prozentzeichen durch Ausrufezeichen. 
09.
setlocal EnableDelayedExpansion 
10.
 
11.
REM In %date:~,2% finden sich die ersten beiden Zeichen (Tag) des 
12.
REM  Datums. Die vorangestellte 1 forciert einen numerischen Vergleich 
13.
REM  auch bei 08 und 09, wobei die 1 beim 2. Vergleichsoperanden 
14.
REM  natürlich auch vorangestellt werden muss. 
15.
REM  Ist also die Bedingung erfüllt, entspricht das deiner Vorgabe 
16.
REM  dass der Tag kleiner als 10 ist. 
17.
if 1%date:~,2% lss 110 ( 
18.
 
19.
  REM Mittels SET /A ist es möglich Berechnungen von ganzzahligen 
20.
  REM  Werten auszuführen. Man kann mehrere Operationen gleichzeitig 
21.
  REM  ausführen, wobei diese durch ein Komma getrennt werden müssen. 
22.
  REM  Auch hier stelle ich wieder eine 1 voran, um die Interpretation 
23.
  REM  als oktale Zahl zu verhindern. So wird beispielsweise aus der 
24.
  REM  (nicht erlaubten oktalen) Zahl 08, die Dezimalzahl 108. 
25.
  set /a "m = 1%date:~-7,2% - 1, y = 1%date:~-2%" 
26.
 
27.
  REM Hier wird überprüft, ob es sich um den Januar handelt. Falls 
28.
  REM  ja, wurde oben aus 01 die 101 und durch die Subtraktion von 1 
29.
  REM  der Wert 100. In diesem Fall wird der Monat auf 12 gesetzt 
30.
  REM  und das Jahr um 1 vermindert. 
31.
  if !m!==100 set /a "m = 12, y -= 1" 
32.
 
33.
  REM Da du die Werte zweistellig benötigst, werden nur die letzten 
34.
  REM  beiden Ziffern weiterverarbeitet. Die vorangestellte 1 wird 
35.
  REM  also wieder abgeschnitten, wodurch man auch Werte mit 
36.
  REM  vorangestellter 0 erhält. 
37.
  set "myDate=!m:~-2!!y:~-2!" 
38.
 
39.
REM Der "else" Zweig wird abgearbeitet wenn der Tag nicht kleiner 
40.
REM  als 10 ist. Den Rest kennst du ja bereits ... 
41.
) else set "myDate=%date:~-7,2%%date:~-2%" 
42.
 
43.
REM Diese Zeile ist ein Konstrukt, um die Variable myDate über 
44.
REM  die Grenze der Subumgebung mit der verzögerten Variablen- 
45.
REM  erweiterung zu retten. 
46.
endlocal &set "myDate=%myDate%" 
47.
 
48.
echo %myDate% 
49.
pause
(Sorry ich weiß immer noch nicht wie man richtig formatiert)
Ganz unten auf jeder Seite gibt's den Link zur Hilfe. Dort ist auch alles über Formatierungen erklärt.

Grüße
rubberman
Bitte warten ..
Mitglied: Klaus20
03.08.2014 um 20:12 Uhr
Hallo rubberman,

vielen Dank für die hervorragende Kommentierung.
Nun wird mir das ganze Konstrukt etwas klarer ohne es allerdings ganz zu verstehen.
Aber "learning by doing".

Nochmals Danke

Gruß Klaus
Bitte warten ..
Mitglied: Klaus20
04.08.2014 um 07:56 Uhr
Hallo rubberman,
hast Du noch eine Idee wie ich es unter Windows XP zum laufen bekomme ??

Gruß

Klaus
Bitte warten ..
Mitglied: rubberman
04.08.2014, aktualisiert um 18:34 Uhr
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
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 (
Grüße
rubberman
Bitte warten ..
Mitglied: Klaus20
05.08.2014 um 07:06 Uhr
Hallo rubberman,
wider mal Danke für Deine Mühe.
Habe folgendes rausgefunden:
  1. echo %date%
ergibt Di 05.08.2014

mit "if 1%date:~,2% lss 110 ("
bekomme ich 0814

mit "if 1%date:~-10,2% lss 110 ("
bekomme ich 0714 damit wird unter XP auch alles richtig abgearbeitet.
Ich weiß nur noch nicht wie es unter Win 7 ist das kann ich erst heute Abend rausfinden.

Grüße
Klaus
Bitte warten ..
Mitglied: rubberman
LÖSUNG 05.08.2014, aktualisiert 06.08.2014
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.
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows 10
gelöst Windows 10 - Datum und Zeitfehler bei Update (3)

Frage von swisstom zum Thema Windows 10 ...

Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Windows Userverwaltung
gelöst Datum einer Gruppenmitgliedschaft (1)

Frage von slansky zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...