Supportnet Computer
Planet of Tech

Supportnet / Forum / BS-Sonstige

Datum des gestrigen Tages ermitteln





Frage

Hallo zusammen, ich möchte per Batch Datei jeden Tag einen Ordner erstellen im Format DDMMJJ - klappt auch dank älterer Threads mit dem Tagesdatum ganz gut. Mein Problem ist - ich hätte das gerne vom gestrigen Tag. Geht da irgendwas von wegen set datum=%date-1%? Gruß,JBond

Antwort 1 von ICH BINS!!!ANDY

HI!

also ich hab da mal ein kleines script geschriebn das dir das gestrige datum in die variable %datum% schriebt.....

@echo off
set /a tag=%date:~0,2%-1
set monat=%date:~3,2%
set jahr=%date:~6,4%
if %tag% EQU 0 set /a monat=%monat%-1
if %monat% EQU 1 set tag1=31
if %monat% EQU 2 set tag1=29
if %monat% EQU 3 set tag1=31
if %monat% EQU 4 set tag1=30
if %monat% EQU 5 set tag1=31
if %monat% EQU 6 set tag1=30
if %monat% EQU 7 set tag1=31
if %monat% EQU 8 set tag1=31
if %monat% EQU 9 set tag1=30
if %monat% EQU 10 set tag1=31
if %monat% EQU 11 set tag1=30
if %monat% EQU 12 set tag1=31
if %monat% EQU 0 set /a jahr=%jahr%-1
if %monat% EQU 0 set monat=12
if %monat% EQU 1 set tag1=31
if %monat% EQU 2 set tag1=29
if %monat% EQU 3 set tag1=31
if %monat% EQU 4 set tag1=30
if %monat% EQU 5 set tag1=31
if %monat% EQU 6 set tag1=30
if %monat% EQU 7 set tag1=31
if %monat% EQU 8 set tag1=31
if %monat% EQU 9 set tag1=30
if %monat% EQU 10 set tag1=31
if %monat% EQU 11 set tag1=30
if %monat% EQU 12 set tag1=31
if %tag% EQU 0 set tag=%tag1%
set datum=%tag%.%monat%.%jahr%
echo %datum%
pause



rechnet alles aus^^
also wenn der heutige tag 1 ist dann wird automatisch monat auch -1 und dann der letzte tag im monat und wenn der Monat 1 ist wird beim Jahr eins abgezogen den monat auf 12 gestellt und dann wieder der letze tag des monats..

guddääh
das wärs..

hoffe das funzt bei die auch so..

Andy

Antwort 2 von JBond

Danke für die Mühe, aber Ausgabe ist bei mir

-1.05.11.2

schade, sah so schön aus...


Antwort 3 von JBond

hab's jetzt geändert...

muss bei mir

set /a tag=%date:~3,2%-1
set monat=%date:~6,2%
set jahr=%date:~11,2%

heißen, da die ersten Zeichen bei date immer der Wochentag ist - jetzt funktioniert's

Danke und schönes WE

btw.
@Andy
heißt du zufällig so ähnlich wie ein gewisses Nachbarland?



Antwort 4 von ICH BINS!!!ANDY

also ich bin
der Andy


Antwort 5 von manei

Hallo,

das geht über ein .vbs-Script einfacher, da hier diese Funktion - z.B. x Tage hinzu zurechnen oder abzuziehen - bereits intergriert ist.

Hier mal eine Batch die das automatisch macht:

Name könnte sein z.B. datediff.bat (frei wählbar)

@echo off
cls
set _T=%temp%\~tmp
echo S=Date>%_T%.vbs
echo S=DateAdd("d", %2, (S))>>%_T%.vbs
echo Wscript.Echo "set out="+CStr(S)>>%_T%.vbs
cscript.exe //nologo %_T%.vbs > %_T%.bat
for %%e in (%_T%.bat del) do call %%e %_T%.???
set %1=%out%
for %%e in ( _T out o) do set %%e=
cls

Diese Batch kannst Du in eine andere Batch intergrieren in Deinem Fall mit

call datediff a -1 und es wird immer das gestrige Datum ermittelt. In "a" ist dann das Ergebnis.

Tage abziehen wird also mit -x angegeben
Tage hinzu zählen einfach mit x

MfG maneich





Antwort 6 von Opa53

Und wenn Du das jetzt noch so hindrehst, das die Ordner im Format JJMMDD benannt werden, dann werden die im Explorer in einer vernünftigen Reihenfolge angezeigt. So wie das jetzt ist, kommen ja erst alle 1., dann alle 2. usw. Aber vielleicht ist für Dich eine gewisse (Un)Ordnung im Verzeichnis ja auch weniger interessant.
Gruß
Opa

Antwort 7 von Massaraksch

Ist doch aber irgendwie sinnlos, einerseits mit Batch zu arbeiten und im gleichen Zusammenhang VB-Script zu verwenden.

Wenn ich mich eh mit dem Scripting Host beschäftigen muß, dann erschlage ich doch lieber gleich das ganze Problem (Ordner mit Datum von gestern erstellen) mit VB-Script und pipe und echo'e nicht hin und her. So nach dem Motto: Warum einfach, wenn es auch ... ;-)

Auch wenn's zum Ausprobieren von Batchmöglichkeiten ja ganz interessant ist.

Massaraksch

Antwort 8 von JBond

@manei
danke für den Ansatz, aber da das Freitag meine ersten Anläufe mit batch-Programmierung waren, ist mir das noch n Stück zu hoch...

@Opa
hatte ich auch schon vorgeschlagen, sollte ich aber nicht...

@all
Freitag hatte das alles noch funktioniert, heute kommt aber ne Fehlermeldung bei
set /a tag=08-1
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.

liegt das an der führenden 0?
aber Freitag mit 05 ging's doch auch...erkennt er also Zahlen mit führender 0 als Oktalzahl?

kann's grad schlecht testen, da ich keine Rechte hab, die Systemzeit zu ändern

Gruß, JBond




Antwort 9 von Massaraksch

Genau erfasst. Zitat (help set):

Numerische Werte stellen immer Dezimalzahlen dar, es sei denn sie haben einen
Präfix 0x für hexadezimale Zahlen, 0b für binäre Zahlen oder 0 für oktale
Zahlen. Damit stellt 0x12 dieselbe Zahl wie 0b10010 oder 022 dar. Beachten Sie,
daß die oktale Schreibweise verwirrend sein kann: So sind 08 und 09 keine
gültigen Zahlen, da 8 und 9 keine erlaubten oktalen Ziffern sind.


Massaraksch

Antwort 10 von Massaraksch

Also hier mal eine VB-Script-Möglichkeit:


'Script von Massaraksch

'Variablen und Objekte deklarieren
dim fso, Ordner
set fso = CreateObject("Scripting.FileSystemObject")	

'Hilfsfunktion, um führende Null bei einstelligen Zahlen zu ergänzen
Function Zweistellig(Zahl)
   if len(Zahl) = 1 then Zahl = 0 & Zahl
   Zweistellig = Zahl
End Function

'Ordner-Namen berechnen (Aktuelles Datum - 1 Tag, Format TTMMJJ)
Ordner = DateAdd("d", -1, Date)
Ordner = Zweistellig(Day(Ordner)) & Zweistellig(Month(Ordner)) & Right(Year(Ordner), 2)

'Ordner erstellen (bei Fehler weiter)
'Hinweis: Pfad anpassen!
On Error Resume Next
fso.CreateFolder("E:\Backup\" & Ordner)

Nur noch nach persönl. Erfordernissen anpassen...

Massaraksch

Antwort 11 von JBond

OK - hab's jetzt mal geändert auf
set xtag=%date:~3,2%
set /a tag=%xtag:~0,1%*10+%xtag:~1,1%-1

könnte bitte mal jemand testen, ob das auch bei Tagen größer 9 noch hinhaut?

Danke, JBond

und dasselbe muss ich jetzt noch bei Monaten und Jahren machen...jetzt weiß ich, warum ich noch nie ne Batch geschrieben hab :-/

Antwort 12 von JBond

sorry, hatte vergessen speichern zu drücken, deshalb so spät die Antwort

kann ich das VB-Script in die Batch einbinden?

mit
set fso = CreateObject("Scripting.FileSystemObject")
kenn ich mich aus VBA schon n bisschen besser aus - ich wollte es aber halt als Batch, damit man nicht erst irgendnen Dokument öffnen muss...

ich glaube ich mach es gleich als Excel-Formular - da kenn ich mich wenigstens aus :-/

danke für die Hilfe



Antwort 13 von Massaraksch

> "ich wollte es aber halt als Batch, damit man nicht erst irgendnen Dokument öffnen muss..."

Verstehe ich nicht. Was für ein Dokument willst du öffnen?

Ein VB-Script (*.vbs) ist im Prinzip fast das gleiche wie eine Batch. Läßt sich (bei Standardkonfiguration von Windows) mit Doppelklick, über eine Verknüpfung, aus einer Batch oder auch mittels Taskplaner starten.

Außerdem: VB-Script ist NICHT VBA! Wenn auch ähnlich.

Massaraksch

Antwort 14 von JBond

ich wollte halt, dass der Anwender nur die Batch anklickt, und dann der Ordner erscheint, und das er nicht erst über irgendeine andere Anwendung gehen muss

ich weiß, das VB-Script nicht VBA ist - aber gerade dein Skript lässt sich so wie es ist auch 1:1 in VBA umsetzen.
und das werd ich jetzt wohl tun, und das ganze gleich noch n bisschen erweitern(Wochenende, etc.) ...

Danke nochmal für die Hilfe...

Gruß, JBond

Antwort 15 von Massaraksch

> "ich wollte halt, dass der Anwender nur die Batch anklickt, und dann der Ordner erscheint, und das er nicht erst über irgendeine andere Anwendung gehen muss"

Ich glaube, ich muß mich nochmal selbst zitieren:

Ein VB-Script (*.vbs) ist im Prinzip fast das gleiche wie eine Batch. Läßt sich (bei Standardkonfiguration von Windows) mit Doppelklick, über eine Verknüpfung, aus einer Batch oder auch mittels Taskplaner starten.

Was willst du noch? Ist das so unverständlich?

Speichere das Ding als "NennMichIrgendwie.vbs" und starte es...

Massaraksch

Antwort 16 von JBond

klappt schon mit der .vbs, aber die Rechner sind so konfiguriert, dass .vbs-Dateien bei Doppelklick zum editieren geöffnet, und nicht ausgeführt werden - insofern würde ich es per Verknüpfung oder Batch dann aufrufen...

aber ich hab's jetzt per VBA mit noch n paar Auswahlmöglichkeiten realisiert - damit können die Anwender dann auch mehr anfangen...

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: