christianvenne
Goto Top

Backup per Batch Datei

Hallo liebes Forum,

da meine erste Frage so mega gut funktioniert hat versuche ich es gleich mit einer zweiten.

Ich habe auf einem Server Datenbanken, die ich gerne auf einen exteren FTP schieben will. Dies soll einmal am Tag mit dem gesamten Backup Verzeichnis geschehen und er soll 7 Tage auf dem Server vorhalten und ältere Ordner wieder löschen.

Das folgende Script hat jahrelang gut funktioniert - und auf einmal aufgehört zu arbeiten. Zumindest in meiner Wahrnehmung face-wink:

@echo off

echo haenge x: an ...
NET USE x: /USER:[USERNAME] \\[FOLDER] ["PASSWORT"]  

echo ermittle datum und wochentag ...
for /f "Tokens=1" %%i in ('unixdate +%%Y-%%m-%%d-%%H-%%M') do set dtt=%%i  

for /f "Tokens=1" %%i in ('unixdate +%%u') do set dw=%%i  

echo loesche altes backup vom Wochentag %dw% ...
rd X:\%dw% /S /Q

echo erstelle backup verzeichnis vom Wochentag %dw% ...
mkdir x:\%dw%
mkdir x:\LOGS

cd X:\LOGS

echo kopiere Daten ...
xcopy /E /H /I /Y "E:\Backups" "x:\%dw%\fms" > X:\LOGS\backup-%dtt%.log  


echo warte 15 sec ...
timeout 15

echo henge X: aus ...
NET USE x: /delete /yes


ALs Antwort bekomme ich den Screenshot. Das script legt den aktuellen Tag immer an. Es scheint aber im Datum einen Fehler zu geben.
Hat jemand eine Idee, was hier falsch ist?
screenshot 2024-05-31 155414

Content-Key: 31044387668

Url: https://administrator.de/contentid/31044387668

Printed on: June 20, 2024 at 15:06 o'clock

Member: niraxx
niraxx May 31, 2024 at 14:03:48 (UTC)
Goto Top
Ist denn das Programm "unixdate" noch vorhanden? Scheint ein kleines Zusatzprogramm zum Berechnen des Datums zu sein.
Member: ChristianVenne
ChristianVenne May 31, 2024 at 14:12:06 (UTC)
Goto Top
a - ich wusste nicht, dass das ein extra programm ist.Ich dachte es wäre ein Befehl.
Deinstalliert oder gelöscht habe ich es nicht - aber wenn ich danach Suche ("unixdate.exe") finde ich auch nichts.
Kann man das datum auch anders ermitteln.
So wie ich es verstehe brauche ich einmal das aktuelle Datum und dann das Datum -7 für den Folder der gelöscht werden soll.
Member: Trommel
Trommel May 31, 2024 updated at 14:16:20 (UTC)
Goto Top
Hier findest Du einige gute Vorlagen dafür. Musst Du nur noch integrieren.
https://stackoverflow.com/questions/11385030/batch-timestamp-to-unix-tim ...

Letztes Posting hat auch ein Download zur (Unix)date.exe , aber definitiv keine Empfehlung von mir da ich es nicht kenne und es auch ohne eine separate exe machbar ist.

Oder wenn Du Glück hast kommt der @hempel noch mal zum Freitag und serviert Dir das auf dem Silbertablett face-wink

Trommel
Member: ChristianVenne
ChristianVenne May 31, 2024 at 14:15:47 (UTC)
Goto Top
mit "date" hatte ich es auch schon versucht - das hat aber auch nicht geklappt. Da bleibt er bei "echo ermittle datum und wochentag ..." stehen.
Member: ChristianVenne
ChristianVenne May 31, 2024 at 14:24:45 (UTC)
Goto Top
@Trommel - das schaue ich mir doch gleich mal an. Ohne eine separate Exe nur mit einem vorhanden Befehl ist natürlich besser. Dann kann die nicht wiederverloren gehen.
Mit "date" hab ich es nur nicht hinbekommen.

mal schauen ob ich Glück hab bei Herrn Hempel face-smile
Member: hempel
Solution hempel May 31, 2024 updated at 14:50:30 (UTC)
Goto Top
Im falschem Arbeitspfad ausgeführt oder fehlendes Programm "unixdate" ...
Das braucht es aber nicht, den aktuellen Timestamp "locale unabhängig" kannst du auch mit Bordmitteln generieren
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f %%a in ('wmic path win32_Localtime get Year^,Month^,Day^,Hour^,Minute^,Second /value ^| findstr .') do set /a %%a  
for %%a in (month day hour minute second) do set "tmp=0!%%a!" &set "%%a=!tmp:~-2!"  
set "timestamp=%Year%-%Month%-%day%-%Hour%-%Minute%"  
echo %timestamp%
Wochentag bekommst du auch so
for /f "delims=" %%a in ('powershell -EP Bypass -C "get-date -F dddd"') do set weekday=%%a  
echo Heute ist %weekday% :-)

Gruß
Member: ChristianVenne
ChristianVenne May 31, 2024 at 14:52:34 (UTC)
Goto Top
Hi Hempel,
sehr cool - habe ich hinbekommen. (ich muss zugeben ich verstehe nicht alles - aber das ist bestimmt schon aufgefallen face-wink )

Ich habe es so geändert :

echo ermittle datum und wochentag ...
for /f %%a in ('wmic path win32_Localtime get Year^,Month^,Day^ /value ^| findstr .') do set /a %%a
set "timestamp=%Year%-%Month%-%day%"
echo %timestamp%

Hier kommt dann also 2024-05-31 raus mit dem ich den Ordner schreiben lassen kann.

Kannst Du mir noch einen Tip geben, wie ich jetzt genau 7 Tage abziehe. Will sagen, dass er es auch richtig macht, wenn ich am 2024-06-03 die sieben Tage abziehe um auf auf den 2024-05-27 zu kommen.
Member: hempel
hempel May 31, 2024 updated at 15:03:54 (UTC)
Goto Top
Zitat von @ChristianVenne:
Kannst Du mir noch einen Tip geben, wie ich jetzt genau 7 Tage abziehe. Will sagen, dass er es auch richtig macht, wenn ich am 2024-06-03 die sieben Tage abziehe um auf auf den 2024-05-27 zu kommen.

for /f "delims=" %%a in ('powershell -EP ByPass -C "(get-date).AddDays(-7).toString('yyyy-MM-dd')"') do set otherdate=%%a  
echo %otherdate%

Tippfehler korrigiert...

Lerne besser gleich Powershell, damit kannst du vieles wesentlich einfacher und effizienter abfrühstücken, Die Zeiten von Batch sind schon lange gezählt.
Member: ChristianVenne
ChristianVenne May 31, 2024 at 15:36:20 (UTC)
Goto Top
Hi hempel,

ganz lieben Dank. Ich schaue mir Powershell mal an. Ich bin eher hobby computer begeistert und freue mich, wenn ich mir Dinge bauen kann.
Ich habe meist aber zu wenig Anwendungen dafür um dran zu bleiben leider. Danke, dass Du den Code gepostet hast - scheint alles zu funktionieren.

LG; Christian