Top-Themen

Aktuelle Themen (A bis Z)

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 vom Vortag in Datei schreiben

Mitglied: AHoefer21

AHoefer21 (Level 1) - Jetzt verbinden

16.02.2006, aktualisiert 08.02.2007, 24401 Aufrufe, 11 Kommentare

Weis irgend jemand, wie man mit einem Batch-file das das Datum vom gestrigen Tag bekommt??
Mitglied: maneich
16.02.2006 um 19:15 Uhr
Hallo,

die Sache ist eigentlich sehr einfach, wird aber etwas komplizierter, wenn damit in den vorherigen Monat gewechselt werden muß, da hier ja bekanntlich der letzte Tag unterschiedlich ist.

Also zunächst mußt Du das Datum trennen z.B. mit

set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%

dann Abfrage, ob Datum 1 bzw. 01, wenn nein, kannst Du gleich 1 subtrahieren mit

if not %tag%==01 set /a tag=%tag%-1 & goto:end

Wenn %tag% 1 ist muß der letzte Tag des vorherigen Monats genommen werden. Der Januar wird einfach auf 13 gesetzt.

if not %monat%==1 goto ts1
set monat=13
set /a jahr=%jahr%-1
for %%e in (2 3 4 5 6 7 8 9 10 11 12 13) do if %monat%==%%e set /a monat=%monat%-1

Für die entsprechenden Tage, wird die Batch nochmals aufgerufen mit
set /a x=%monat%+2
set i = 3
%0 : loop,31,28,31,30,31,30,31,31,30,31,30,31,?

und bei :loop fertiggestellt

:loop
if %i%==%x% for %%e in (set goto:ts2) do %%e tag=%3
eingabe i=add %i%, 1
for %%e in (shift goto:loop) do %%e
:ts2
echo Tag: %tag%
pause

Zum Schluß wird das alles wieder zusammen gesetzt mit

:end
set datum=0%tag:~-2%.0%monat:~-2%.%jahr%

Die Batch als Ganzes:
Name = vortag.bat
Aufruf = vortag datum

01.
:: -----------------------zip 
02.
@echo off 
03.
cls 
04.
if %2'==loop' goto %2 
05.
set z=%1 
06.
set jahr=%date:~-4% 
07.
set monat=%date:~-7,2% 
08.
set tag=%date:~-10,2% 
09.
if not %tag%==01 set /a tag=%tag%-1 & goto:end 
10.
if not %monat%==1 goto ts1 
11.
set monat=13 
12.
set /a jahr=%jahr%-1 
13.
:ts1 
14.
for %%e in (2 3 4 5 6 7 8  9 10 11 12 13) do if %monat%==%%e set /a monat=%monat%-1 
15.
set /a x=%monat%+2 
16.
set i = 3 
17.
%0 : loop,31,28,31,30,31,30,31,31,30,31,30,31,? 
18.
:loop 
19.
if %i%==%x% for %%e in (set goto:end) do %%e tag=%3 
20.
eingabe i=add %i%, 1 
21.
for %%e in (shift goto:loop) do %%e 
22.
:end 
23.
set %z%=0%tag:~-2%.0%monat:~-2%.%jahr% 
24.
cls 
25.
:: ---------------------------snip
Was hier noch nicht berücksichtigt ist, ist das Schaltjahr.


MfG maneich
Bitte warten ..
Mitglied: Biber
14.04.2006 um 19:08 Uhr
Was hier noch nicht berücksichtigt ist, ist das Schaltjahr.

Na gut, dann berücksichtigen wir das Schaltjahr auch noch:
01.
:: ----snipp yesterday.bat ---Gibt Datum vom Vortag aus... 
02.
@echo wscript.echo dateAdd("d",-1, date())>%temp%\gestern.vbs 
03.
@cscript //nologo %temp%\gestern.vbs 
04.
@del %temp%\gestern.vbs 
05.
:: ---snapp
Yesterday >file.xyz würde dann das gestrige Datum in eine Datei file.xyz schreiben.

Gruß Biber
Bitte warten ..
Mitglied: maneich
14.04.2006 um 20:27 Uhr
Hallo,

@Biber
so kann man es natürlich auch einfacher machen; aber dies kann man noch verbessern:

01.
:: ----snipp yesterday.bat ---Gibt Datum vom Vortag aus... 
02.
@echo wscript.echo "set out=" & dateAdd("d",-1, date())>%temp%\gestern.vbs 
03.
@cscript //nologo %temp%\gestern.vbs>%temp%\gestern.bat 
04.
for %%e in (%temp%\gestern.bat del) do call  %%e %temp%\gestern.??? 
05.
echo %out% 
06.
:: ---snapp
in %out% steht dann das gestrige Datum zur Weiterverarbeitung.

MfG maneich
Bitte warten ..
Mitglied: Biber
14.04.2006 um 20:55 Uhr
@maneich
Mal sehen, wer von uns beiden es zuerst auf einen Oneliner zusammengedampft hat *gg
01.
::------snipp 
02.
@echo wscript.echo dateAdd("d",-1, date())>%temp%\gestern.vbs 
03.
@For /f %%i in ('cscript //nologo %temp%\gestern.vbs') do @set "yesterdate=%%i" 
04.
@del %temp%\gestern.vbs 
05.
::---snapp
Nun steht es in %yesterdate%

Amüsierten Gruß
Biber
Bitte warten ..
Mitglied: thats
08.02.2007 um 07:28 Uhr
hallo an alle,

hab mir das script mal angesehen und wollts mal testen. nur leider hab ich das problem, dass ich in der zeile (s.u.) folgende fehlermeldung bekomme:
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), hexadezimale(0x11) oder oktale (021) Zahlen.

01.
if not %tag%==01 set /a tag=%tag%-1 & goto:end
Bitte warten ..
Mitglied: Biber
08.02.2007 um 07:55 Uhr
Moin thats,

das passiert, wenn in der Variablen %tag% eine 08 bzw. 09 steht.
Zahlen mit einer führeneden Ziffer Null werden ja, wie der sympathische Weltmarktführer dokumentiert hat, als Oktal-Werte interpretiert.
Und da sind natürlich 08 und 09 ungültig.

Workaround:
01.
... 
02.
REM Sonderbehandlung Tag ist 01.... 
03.
if %tag%==01 goto Sonderfall 
04.
REM alle anderen Fälle... 
05.
Set /a %tag%=1000%tag% 
06.
Set /a %tag%-=1 
07.
Set tag=%tag:~-2,2%
...oder, auf deutsch:
- mache aus 01,...07...22...30 eine 100001, ....100007....100022, ...100030
- subtrahiere 1
- nimm vom Ergebnis nur die letzten beiden Stellen

Gruss
Biber
Bitte warten ..
Mitglied: thats
08.02.2007 um 09:09 Uhr
okay danke, biber.

klappt soweit, nur wenn ich das datum auf éinen monats-1. stelle, mag er mich nicht mehr.

mein code einstweilen:
01.
if %2'==loop' goto %2 
02.
set z=%1 
03.
set jahr=%date:~-4% 
04.
set monat=%date:~-7,2% 
05.
set tag=1000%date:~-10,2% 
06.
if not %tag%==100001 set /a tag=%tag%-1 & goto:end 
07.
if not %monat%==1 goto ts1 
08.
set monat=13 
09.
set /a jahr=%jahr%-1 
10.
:ts1 
11.
for %%e in (2 3 4 5 6 7 8 9 10 11 12 13) do if %monat%==%%e set /a monat=%monat%-1 
12.
set /a x=%monat%+2 
13.
set i = 3 
14.
%0 : loop,31,28,31,30,31,30,31,31,30,31,30,31,? 
15.
:loop 
16.
if %i%==%x% for %%e in (set goto:end) do %%e tag=%3 
17.
eingabe i=add %i%, 1 
18.
for %%e in (shift goto:loop) do %%e 
19.
:end 
20.
set z=%tag:~-2,2%.%monat:~-2,2%.%jahr% 
21.
 
22.
pause
Bitte warten ..
Mitglied: maneich
08.02.2007 um 11:59 Uhr
Hallo,

was für die Berechnungen bei führender Null für den Tag gilt, sollte dann ja auch für den Monat gelten.

Wenn Du bei der Ermittlung rein auf Batchbasis bleiben willst, ist es sicher besser, die führenden Nullen zunächst zu entfernen, und am Ende wieder hinzu zu fügen.

Also:

set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
if %tag%<10 set tag=%tag:~-1%
if %monat%<10 set monat=%monat:~-1%

damit sind keine führenden Nullen mehr vorhanden.

Nach den Berechnungen dann die Umkehr:

if %tag%<10 set tag=0%tag%
if %monat%<10 set monat=0%monat%

Berechnungen für ein Datum sind auf reiner Batchbasis etwas umständlich. Einfacher geht es mit VBS (siehe Beispiele weiter oben), da hier bereits alle Möglichkeiten fest integriert sind und der Ablauf dürfte sicher genau so schnell sein.

MfG maneich
Bitte warten ..
Mitglied: thats
08.02.2007 um 12:32 Uhr
also nachdem bei mir NUR der tag wichtig war und nicht das monat bzw jahr hab ichs mal so gelöst - mit meinen minderwertigen dos-kenntnissen. aber es funktioniert.
was mich etwas stört, dass ich für die schaltjahre leider kein vielfaches eingeben konnte, sodass er mir das immer auf die nächste 4 jahre von zb 2008 weg berechnet.

01.
@echo off 
02.
set jahr=%date:~-4% 
03.
set monat=%date:~-7,2% 
04.
set tag=1000%date:~-10,2% 
05.
set /a vormonat=%monat%-1 
06.
 
07.
if not %tag%==100001 set /a tag=%tag%-1 & goto end 
08.
 
09.
for %%j in (0 1 3 5 7 8 10) do if %vormonat%==%%j set /a tag=100031 & goto end 
10.
for %%k in (4 6 9 11) do if %vormonat%==%%k set /a tag=100030 & goto end 
11.
 
12.
set /a tag=100028 
13.
for %%l in (2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 2052) do IF %jahr%==%%l set /a tag=100029 
14.
 
15.
:end 
16.
set tag=%tag:~-2,2% 
17.
 
18.
echo %tag% 
19.
 
20.
pause
Bitte warten ..
Mitglied: Biber
08.02.2007 um 14:33 Uhr
Moin thats,

was mich etwas stört, dass ich für die schaltjahre leider kein vielfaches eingeben konnte,
eine Alternative zur For ...(2004.......2052) -Anweisung ist die FOR /L-Anweisung:
01.
>(=14:31:03  D:\temp=) 
02.
>for %l in (2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 2052) do @echo %l 
03.
2004 
04.
2008 
05.
2012 
06.
2016 
07.
2020 
08.
2024 
09.
2028 
10.
2032 
11.
2036 
12.
2040 
13.
2044 
14.
2048 
15.
2052 
16.
 
17.
(=14:31:09  D:\temp=) 
18.
>for /l %l in (2004,4, 2052) do @echo %l 
19.
2004 
20.
2008 
21.
2012 
22.
2016 
23.
2020 
24.
2024 
25.
2028 
26.
2032 
27.
2036 
28.
2040 
29.
2044 
30.
2048 
31.
2052
HTH Biber
Bitte warten ..
Mitglied: thats
08.02.2007 um 15:10 Uhr
ha super perfekt! also werd mich dann mal mit dem script ein paar hundert jahre verewigen. mal schaun obs solange hält +smile+

grüße thats
Bitte warten ..
Ähnliche Inhalte
Windows Server

Alle AD-User mit dem Datum der letzten Anmeldung in eine CSV-Datei schreiben

gelöst Frage von Winfried-HHWindows Server10 Kommentare

Hallo Scripting-Experten, wie kann ich auf einem Server 2003 (bitte keine Kommentare dazu bitte) alle im AD angelegten Benutzer ...

Batch & Shell

Dateien nach Datum verschieben

Frage von LKDNDK12Batch & Shell4 Kommentare

Hallo Community, ich habe folgendes Problem: ich muss Dateien mit dem Kriterium Speicherdatum verschieben. Die Ordnerstruktur: H:\Zaehlerdaten\Auslesung1\32.21.54\log\year\ (danach noch ...

Batch & Shell

Datei mit Datum im Namen erstellen

gelöst Frage von pbelclBatch & Shell6 Kommentare

Ich habe mir ein kleines Batch geschrieben, das mir eine Date erstellt, die im Namen das Datum und die ...

Batch & Shell

Datum in Datei speichern und wieder auslesen

gelöst Frage von AndroxinBatch & Shell3 Kommentare

Moinsen, ich spiele gerade ein wenig mit der Powershell und Zeitstempeln rum: Zeitstempel mit Get-Date erstellen, als String in ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 12 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 12 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server23 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Windows Server
Downgrade von Windows Server 2016 auf 2012 - Wie vorgehen?
Frage von EstefaniaWindows Server13 Kommentare

Guten Ich habe eine Frage an Erfahrene unter euch. Durch einen InPlace Upgrade wurde Windows Server 2012 auf die ...

Datenschutz
Telematikinfrastruktur Erfahrungsaustausch
Frage von MOS6581Datenschutz12 Kommentare

Moin, unter meinen Kunden befinden sich auch einige Ärzte, welche sich künftig mit der Telematikinfrastruktur-Geschichte der Gematik herumärgern dürfen. ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...