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

Frage Entwicklung Batch & Shell

Mitglied: AHoefer21

AHoefer21 (Level 1) - Jetzt verbinden

16.02.2006, aktualisiert 08.02.2007, 22654 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.


Mit freundlichen Grüßen 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.

Mit freundlichen Grüßen 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.

Mit freundlichen Grüßen 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...