cali169
Goto Top

Via batch das aktuelle Datum minus 1nem Monat als Dateinamen ausgeben

Hallo zusammen,

bitte net gleich schlagen, habe gegoogelt aber bin net schlau geworden. würde mich über hilfe freuen.

vielen dank im voraus.

also ich habe ein script welches mir dateien zippt. der dateiname wird mit dem aktuellen datum versehen " D1AMG_02-2011.zip ". dies funktioniert.

ich hätte nur gern das das aktuelle datum minus 1nem monat als dateiname angezeigt wird.


rem @echo off

set "Datum=%date:~-7,2%-%date:~-4%"

for %%i in (X:\SicherungDB2\D1AMG\*.001) do C:\Programme\7-Zip\7z.exe a "D1AMG_%Datum%.zip" "%%i"

Content-ID: 162279

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Skyemugen
Skyemugen 09.03.2011, aktualisiert am 18.10.2012 um 18:46:06 Uhr
Goto Top
Aloha,

nun, da wir gerne das „wie-schaffe-ich-es-selbst” fördern, verlinke ich dir mal nur diesen Thread, wo eigentlich schon alles drin ist, was du brauchen wirst (nämlich am Einfachsten ein temporäres VBScript).

Was mich nur wundert: Momentan gibst du nur MM-JJJJ aus, willst aber doch wirklich schon den Tag-1, ja? =)

greetz André
cali169
cali169 09.03.2011 um 09:05:14 Uhr
Goto Top
thx für die antwort, habe evtl. eine info unterschlagen sry

habe meine frage angepasst,


das ergebnis schaut aktuell so D1AMG_02-2011.zip aus. nun wird die zip datei immer am monats ersten für den vormonat erstellt. glaube das mit dem minus 1nen tag ist blödsinn von mir.

es sollte also eine zippdatei die in 03 erstellt wird im namen den 02. haben.

hoffe ist verständlich?
Skyemugen
Skyemugen 09.03.2011 um 09:41:29 Uhr
Goto Top
Aloha,

dann so?

set "G=%temp%\monthago.vbs"  

REM Das VBScript wird erzeugt, für die Datumsberechnung
>%G% echo wscript.echo DateAdd("m",-1,Date)  
for /f %%i in ('cscript //nologo %G%') do set "monthago=%%i"  
del %G%

set "Datum=%monthago:~-7,2%-%monthago:~-4%"   

greetz André
Crusher007
Crusher007 09.03.2011 um 10:53:50 Uhr
Goto Top
Hi cali,

also ich habs bei mir iner batch ganz einfach so gelöst:

@echo off & setlocal
set currentMONTH=%date:~3,2%
set /a "lastMONTH=%currentMONTH%-1"  

echo %lastMONTH%
pause

Greets Crusher
Skyemugen
Skyemugen 09.03.2011 um 10:58:51 Uhr
Goto Top
Aloha Crusher,

was macht er dann im Januar?

1 minus 1 = 0, was aber falsch wäre, da Januar minus 1 = Dezember wäre also 12, was mit batch so aber nicht geht (daher auch VBS) ;)

greetz André
Ralph4
Ralph4 09.03.2011 um 11:58:19 Uhr
Goto Top
1 minus 1 = 0, was aber falsch wäre, da Januar minus 1 = Dezember wäre also 12, was mit batch so aber nicht geht (daher
auch VBS) ;)

greetz André

Hallo Andrè

hier mal ein Beispiel für Dos

@echo off & setlocal
set currentMONTH=%date:~3,2%
set currentYear=%date:~6,4%

set /a "lastMONTH=%currentMONTH%-1"
set /a "lastYear=%currentYear%-1"

if %lastMonth% == 0 Goto Ausgabe1
if not %lastMonth% == 0 Goto Ausgabe2


:Ausgabe1
echo 12_%lastYear%
pause

:Ausgabe2
echo %lastMONTH%_%currentYear%
pause
cali169
cali169 09.03.2011 um 12:14:50 Uhr
Goto Top
sry, war an ner anderen bausstelle,

vielen dank für die antworten,

@ ralph

wie binde ich das jetzt in meinen namen der zippdatei ein?


set "Datum=%date:~-7,2%-%date:~-4%"

for %%i in (X:\SicherungDB2\D1AMG\*.001) do C:\Programme\7-Zip\7z.exe a "D1AMG_%Datum%.zip" "%%i"
Ralph4
Ralph4 09.03.2011 um 12:23:38 Uhr
Goto Top
Hallo Cali169

dein Set Datum schreibst du dorthin wo mein Echo steht und benutzt dann weiter deine Variable.

Hier das veränderte Script:

@echo off & setlocal
set currentMONTH=%date:~3,2%
set currentYear=%date:~6,4%

set /a "lastMONTH=%currentMONTH%-1"
set /a "lastYear=%currentYear%-1"

if %lastMonth% == 0 Goto Ausgabe1
if not %lastMonth% == 0 Goto Ausgabe2


:Ausgabe1
set myDate=01_12_%lastYear%
echo %myDate%
goto myRename

:Ausgabe2

set myDate=01_%lastMONTH%_%currentYear%
echo %myDate%
goto myRename

:myRename

ren test.bat "%myDate%.bat"
Skyemugen
Skyemugen 09.03.2011 um 12:33:36 Uhr
Goto Top
Aloha Ralph,

nimm es mir nicht übel aber ich finde derartige „Basteleien” unschön (nicht nur für's Auge) und habe lieber ein Fundament, was alles erfüllt und mehrfach einsetzbar ist (mach das mal mit Tage, viel Spaß mit batch ... ich nutze das VBS auch für Tage und muss dann nur einen Buchstaben ändern).

greetz André
Ralph4
Ralph4 09.03.2011 um 12:39:22 Uhr
Goto Top
Hallo Andrè

ich persönlich finde batch dateien auch nicht so berühmt und arbeite lieber mit VBS oder .net aber wenn ausdrücklich nach batch gefragt wird kann man sich ja mal verbiegen.
Wir wissen ja nicht was dahintersteckt und wofür er es benötigt.
Wie gesagt die Wahl meiner Mittel wäre auch VBS.

LG Ralph4
Skyemugen
Skyemugen 09.03.2011 um 13:05:50 Uhr
Goto Top
Aloha,

Zitat von @Ralph4:
aber wenn ausdrücklich nach batch gefragt wird

dann ignorieren, nein optimieren wir es hier bei solchen Sachen gerne *gg* bzw. verschleiern alles ins batch ;)

greetz André

P.S.: mit code-tags sind ebenso schöner für's Auge =)

edit: Warum machst du nicht wenn dann else statt if not? Warum zweimal dasselbe abfragen?
if %lastMonth%==0 (Goto Ausgabe1) else (Goto Ausgabe2)
cali169
cali169 09.03.2011 um 14:29:20 Uhr
Goto Top
thx @ all,


ich habe es noch für meine bedürfnisse angepasst und in meiner variable einfach datum durch mydate ersetzt. den wochentag habe ich auch entfernt.

es funktioniert und das zählt.

auch wenn es net unbedingt schön fürs auge ist face-wink
60730
60730 09.03.2011 um 17:19:09 Uhr
Goto Top
moin,

das tut ja richtig weh......

setlocal
set MONTH=%date:~3,2%
set Year=%date:~6,4%
if  %MONTH% gtr 2 set /a "MONTH=%MONTH%-1"  
if  %MONTH%==1 set /a "MONTH=+11" & set /a "Year=-1"  

echo %MONTH%_%Year%
pause

@sky - "Basteln" darf und macht hier nur der Bastla - auch wenn das von euch beiden gut gemeint war, aber hier in dem Forum so eine Batch als Lösung zu präsentieren, das ist pervers

Gruß
Skyemugen
Skyemugen 09.03.2011 um 17:29:42 Uhr
Goto Top
Aloha T-Mo!

Mal sachte, ja ... ich habe hier nichts perverses verbreitet nur den üblichen VBS-Kram, den man gerne nutzt (kam damals von bastla).
Dieses sonstige Gefummel habe ich mir gar nicht erst groß angeguckt es schreckte einfach ab. Ich bleibe lieber bei never change a running system aber reicht ja, wenn du dir die Mühe mit dem Augenkrebs angetan hast und was rumgebätschelt hast :P

greetz André

zieh mich da nicht mit in den Sumpf rein
Biber
Biber 09.03.2011 um 18:31:26 Uhr
Goto Top
[OT] @t-mo

Nichts gegegen deinen Algorithmus, aber drei bis vier Nachfragen hätte ich doch noch ...face-wink

a) Wenn doch diese beide Zeilen alle Zeilen sind, in denen der Vormonat "berechnet" werden soll...
if %MONTH% gtr 2 set /a "MONTH=%MONTH%-1"
if %MONTH%==1 set /a "MONTH=+11" & set /a "Year=-1"

Habe ich dann mit der zweiten Zeile einen %MONTH%-Wert von 1 und mit der Zeile darüber alle %MONTH%e mit 3 und größer berücksichtigt?
Fehlt da nicht der Februar??

b) Kann denn wohl, wenn %MONTH% ein zweistelliger String ist wie hier
set MONTH=%date:~3,2%
kann denn dieser zweistellige Wert auch gléich der Ziffer 1 sein?
>if 01==1 @echo Guck ma' was ich zaubern kann....  

c) aber auch eine geänderte Zeile
if "%MONTH%" gtr "01" set /a "MONTH=%MONTH%-1"
würde doch nur die linke Seite, den IF Vergleich hinbekommen. Rechts davon klappt es nur bis zum September..
>if "09" gtr "01" set /a 09-1  
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.

d) WhoTF fällt denn auf sowas rein:
if %MONTH%==1 set /a "MONTH=+11" ....
--> Wenn %MONTH% = 1 (oder 01) ist, dann muss ich 11 addieren lassen von einer Rechenmaschine??? Ist das die Message? ;-9
Kann ich nicht einfach sagen: Wenn "%MONTH%"=="01" Set "MONTH=12" ?? Mein' ja nur....

Hey, wenn der TO irgendein Zivi ist, der mit euren Batch-Datumsberechnungen die Essensausgabe in einer Seniorenresidenz fernsteuert....
Und man merkt es wahrscheinlich erst nach Wochen...

Grüße
Biber
[/OT]
60730
60730 09.03.2011 um 19:47:15 Uhr
Goto Top
moin mädelz..

ich hatte ursprunglich noch ein "ungetestet" unter dem Schnippsel und wenn ich mir das zusammengekürzte und von mir im Hauruckverfahren zurechtgestutzte Ralfscript jetzt genauer ansehe....
...au Backe

Fehlt da nicht der Februar??
Si Senôr face-sad - mindestens -
@andre
Mal sachte, ja ... ich habe hier nichts perverses verbreitet
Die Zeile bezog sich auf das unschöne Script von Ralf und deinen Kommentar "gebastelt" face-wink
[/OT]

gruß
Skyemugen
Skyemugen 09.03.2011 um 19:54:43 Uhr
Goto Top
Zitat von @60730:
Die Zeile bezog sich auf das unschöne Script von Ralf und deinen Kommentar "gebastelt" face-wink

Gut! Dann einigen wir uns auf geschustert *g* der TE muss auch schon denken: „Was geht denn hier ab?!”
Biber
Biber 09.03.2011 um 20:05:05 Uhr
Goto Top
[OT]
Zitat von @Skyemugen:
Gut! Dann einigen wir uns auf geschustert *g*
Nein, das geht nicht.
Meine sofort abspulende freie Assoziationskettenrolle kommt dann sofort von "schuster" auf "bleib bei deinen "Leisten".
Und von "Leisten" komm ich natürlich sofort auf meine Praktikantinnen.
Also - rein assoziativ natürlich nur. *rotwerd*
Aber auch das ist seit heute, dem Beginn der Fastenzeit, nicht mehr angebracht.

"Schustern" entfällt also, "zusammenbraten" geht auch nicht (nix fleischliches, nix braten) ...
"Zusammenschroten" vielleicht.... nein, bei "Schrot" denke ich sofort an "Korn"...*grybel......

Melde mich, sobald mir etwas Unverfängliches einfällt...

Grüße
Biber
[/OT]
Ralph4
Ralph4 09.03.2011 um 20:06:11 Uhr
Goto Top
hallo an die lieben Mitwirkenden.

ich finde es super wie hier auf Anfragen reagiert wir. (wenn alles vorbei ist zerupfen wir mal das was geschrieben wurde).
Warum sollte man sich auch auf das helfen(in welcher Form auch immer) beschränken wenn das lästern doch so schön ist.
Dass dieses Script nicht das schönste ist mal dahingestellt, es tut und wie ich der Antwort entnehme hat es der betreffenden Person so geholfen.
Da ich jetzt aber die Reaktion darauf sehe, ärgere ich mich, dass ich dachte dies ist eine etwas andere Platform als die üblichen.
Ach übrigens mit dieser Art überlegt sich jeder zweimal ob er auf eine Frage antwortet. Sollte das die eigentliche Intension sein, kann ich nur sagen Ziel erreicht.

Einen schönen Abend noch.
Biber
Biber 09.03.2011 um 20:51:46 Uhr
Goto Top
Moin Ralph,

Zitat von @Ralph4:
hallo an die lieben Mitwirkenden.

ich finde es super wie hier auf Anfragen reagiert wir. (wenn alles vorbei ist zerupfen wir mal das was geschrieben wurde).
Warum sollte man sich auch auf das helfen(in welcher Form auch immer) beschränken wenn das lästern doch so schön ist.
Jepp, den Schuh mit dem gerne Lästern zieh ich mir an, aber....
Dass dieses Script nicht das schönste ist mal dahingestellt, es tut und wie ich der Antwort entnehme
hat es der betreffenden Person so geholfen.
Ja, schon.
Als Hilfs-Moderator in diesem Skriptingbereich kann ich aber nicht "echte" Fehler so stehen lassen.
Und darauf hoffen, dass es der TO erst im Monat 09=September oder 02=Februar merkt.
Um die Ästhetik oder Eleganz ging es mir nicht - und hey! Wenn ich versuchen würde, einem Java- oder C#-Coder oder auch nur meiner Oma zu erzählen, dass es "hübsche" und "hässliche" Batchskripte gibt - die werden etwas irritiert gucken.
.
Da ich jetzt aber die Reaktion darauf sehe, ärgere ich mich, dass ich dachte dies ist eine etwas andere Platform als die üblichen.
Nein, wir sind da nicht besser und nicht anders. Aber wir arbeiten daran.
Ach übrigens mit dieser Art überlegt sich jeder zweimal ob er auf eine Frage antwortet.
Sollte das die eigentliche Intension sein, kann ich nur sagen Ziel erreicht.
Wenn es bei dir so angekommen ist: dann von mir eine Entschuldigung im Namen aller.
Es sollte nicht herunterputzend, nicht arrogant, nicht beleidigend sein und ja: es haben alle auch gelesen, dass der TO deinen Ansatz als Lösung für seine Frage ansieht und damit durchaus glücklich ist.

Einen schönen Abend noch.
Dir auch und nimm es nicht so persönlich.

Grüße
Biber
bastla
bastla 09.03.2011 um 21:24:33 Uhr
Goto Top
Hallo @all!

Da das "September"-Problem (bzw eigentlich das "August"-Problem - auch "08" ist keine gültige Oktalzahl) noch nicht gelöst ist, auch von mir noch eine Variante:
@echo off & setlocal
set "MONTH=%date:~-7,2%"  
set "YEAR=%date:~-4%"  

set /a MONTH=1%MONTH%-1
set "MONTH=%MONTH:~-2%"  
if %MONTH%==00 (
    set "MONTH=12"  
    set /a YEAR-=1
)

set "Datum=%MONTH%-%YEAR%"  
echo %Datum%
Zum Testen anderer Monatswerte einfach die freie Zeile 4 dazu verwenden, zB
set "MONTH=01"
einzufügen ...

Grüße
bastla
Biber
Biber 09.03.2011 um 21:27:38 Uhr
Goto Top
[OT] @bastla
bzw eigentlich das "August"-Problem - auch "08" ist keine gültige Oktalzahl)
Ich habe den August nicht erwähnt, weil doch dann alle Urlaub haben und dieser Batch nicht läuft... face-wink

Hier noch mal der hoffentlich visualierte Fehler in Ralph4s Ursprungsansatz:
@echo off & setlocal 
set currentMONTH=%date:~3,2% 
REM Hier kommt ein ZWEISTELLIGER String raus "01", "02" ....."11", "12"  

set currentYear=%date:~6,4% 
REM .... unkritisch ..."2010"..."2011" "2012"....  

set /a "lastMONTH=%currentMONTH%-1"   
REM set /a "lastMONTH=01-1" ---> okay--> ergibt 0  
REM set /a "lastMONTH=02-1" ---> okay--> ergibt 1  
REM set /a "lastMONTH=03-1" ---> okay--> ergibt 2  
...
REM set /a "lastMONTH=07-1" ---> okay--> ergibt 6  
REM set /a "lastMONTH=08-1" ---> knallt, weil 08 als Oktal-Zahl interpretiert wird, probier es aus  
REM set /a "lastMONTH=09-1" ---> knallt, weil 09 als Oktal-Zahl interpretiert wird, probier es aus  
REM set /a "lastMONTH=10-1" ---> okay, ergibt 9  
....

Grüße
Biber
[/OT]
pieh-ejdsch
pieh-ejdsch 10.03.2011 um 01:22:09 Uhr
Goto Top
moin,

aber jetzt mal wieder was zum Verbessern gefunden (nich lachen! is bei mir auch net anders.)

@bastla
Deine Zeile 05 würde nicht funktionieren wenn keine vornull im Monat steckt (im Sinne von Falsches Resultat)
set /a MONTH=1%MONTH%-1

gibts überhaubt ein %date% ohne Vornull

Gruß Phil
Ralph4
Ralph4 10.03.2011 um 07:34:23 Uhr
Goto Top
Danke Biber,

jetzt habe ich es auch verstanden face-wink und finde das Skript vom bastla gut.
Habe mir auf Grund dieses Thread vorgenommen keine ungetesteten Scripts zu publizieren.
Ich hoffe cali schaut noch einmal rein und verändert sein Skript dahingehend.

Grüße Ralph
bastla
bastla 10.03.2011 um 07:56:35 Uhr
Goto Top
@ph
gibts überhaubt ein %date% ohne Vornull
Wenn dem so wäre, würde schon die Zerlegung des Datums scheitern ...

Falls Du aber dennoch zB
9.3.2011
erwarten würdest, dann einfach:
set /a MONTH=1%MONTH:.=0%-1
Grüße
bastla
Skyemugen
Skyemugen 10.03.2011 um 08:54:08 Uhr
Goto Top
Und die Moral von der Geschicht': „Ungetestete Skripte poste nicht ach nein, macht der bastla ja auch immer *gg* dann muss es anders heißen verweigere dich der VBS-Lösung nicht *^__^*” oder so ;)

Aber ich möchte wirklich nicht wissen, was bei Tagen in dieser Form alles zu beachten wäre *gg*

greetz André
Ralph4
Ralph4 10.03.2011 um 09:31:50 Uhr
Goto Top
So habe das Skript nochmal Überarbeitet und diesmal auch getestet face-wink
Hoffe ich habe alle Eventualitäten berücksichtigt.
@echo off & setlocal
set currentMONTH=%date:~4,1%
set helpObject=%date:~3,1%
set currentYear=%date:~6,4%

if %helpObject% == 1 (set /a "MONTH = %currentMONTH%+9") Else (set /a "MONTH = %currentMONTH%-1")  

set /a "lastYear=%currentYear%-1"  


if %Month% == 0 (set myString=12_%lastYear%) Else (set mystring=%MONTH%_%currentYear%)

echo %mystring%
pause

Hoffe diesesmal auch schön genug *lach

Gruß Ralph
bastla
bastla 10.03.2011, aktualisiert am 18.10.2012 um 18:46:07 Uhr
Goto Top
@Skyemugen
Aber ich möchte wirklich nicht wissen, was bei Tagen in dieser Form alles zu beachten wäre *gg*
Ich hätte Dich für neugieriger gehalten face-wink ...

Nur für den Fall des Falles: Morgiges Datum in Batchdatei bestimmen

Grüße
bastla

P.S.:
Ungetestete Skripte poste nicht ach nein, macht der bastla ja auch immer *gg*
Nicht immer, aber immer öfter ... face-wink
60730
60730 10.03.2011 um 22:04:45 Uhr
Goto Top
Salü,
Zitat von @Ralph4:
hallo an die lieben Mitwirkenden.

ich finde es super wie hier auf Anfragen reagiert wir. (wenn alles vorbei ist zerupfen wir mal das was geschrieben wurde).
  • It ain't over till the fat lady sings.... - bedeutet hier zu ~85%, erst wenn einer der beiden Bs aus dem B Bereich ins Horn gebtutet hat, fällt der Vorhang face-wink


Warum sollte man sich auch auf das helfen(in welcher Form auch immer) beschränken wenn das lästern doch so schön ist.
  • Was noch schöner ist - oberflächlich einen Bock in einem Skript erkannt zu haben und mindestens 3 weitere im Schnellschussverfahren aus der Hüfte zu hinterlassen face-wink
Den Schuh zieh ich mir an und ich hab den auch noch nicht edifiziert, weil man auch mal zu seinen Fehlern stehen kann

Dass dieses Script nicht das schönste ist mal dahingestellt, es tut und wie ich der Antwort entnehme hat es der betreffenden Person so geholfen.
  • "Ebbe net - siehe der Kommentar von einem der beiden Besagten Bs aus dem B Bereich face-wink
Da ich jetzt aber die Reaktion darauf sehe, ärgere ich mich, dass ich dachte dies ist eine etwas andere Platform als die üblichen.
  • Wie gesagt, die Party ist erst zuende, wenn die das Skript sich die Zeile @echo off auch verdient hat face-wink
Ob dieses nun am Bande, 1. Klasse oder mit Stern und Schulterband ist - vollkommen Jacke wie Hose.

Ach übrigens mit dieser Art überlegt sich jeder zweimal ob er auf eine Frage antwortet.
Sollte das die eigentliche Intension sein, kann ich nur sagen Ziel erreicht.
Nimms sportlich - in meiner Jugend galt der Spruch, Erst gurten, dann spurtenstarten“ heute gilt "erst denken, dann lenken" face-wink

Einen schönen Abend noch.
Dito und nur eine Zeile sei mir noch erlaubt..
  • Jeder der hier versteht, dass er/Sie durch Mithilfe selber lernt - ist immer willkommen.

Gruß
Biber
Biber 10.03.2011 um 22:15:59 Uhr
Goto Top
[OT] @t-mo
Zitat von @60730:
Nimms sportlich - in meiner Jugend galt der Spruch, Erst gurten, dann spurtenstarten“
In deiner Jugend?? Gab es schon Gurte??? Bei Ben Hur????
*duck und wech*
[/OT]
60730
60730 11.03.2011 um 09:18:13 Uhr
Goto Top

[OT]
Zitat von @Biber:
In deiner Jugend?? Gab es schon Gurte??? Bei Ben Hur????
*duck und wech*

yupp, und wenn die benutzt werden, hört sich das so an face-wink
[/OT]

Gruß
cali169
cali169 11.03.2011 um 11:22:16 Uhr
Goto Top
vielen dank @ ralph u @ all

das script läuft jetzt sauber auch in den monaten 8 u 9 sowie beim jahreswechsel. tage benötige ich nicht in der ausgabe.

so nun noch etwas allgmeines.

ich finde es gut das einem geholfen wird, klar wer nicht. auch das es korrekturen gibt etc. gibt.

aber bei allem sollte doch immer daran gedacht werden, das der ton die musik macht. u man muss nun wirklich nicht abtrifften in nicklichkeiten. denke auch pervers ist hier net angebracht.

ich denke es sollte hier lösungsorientiert zugehen. wenn man schreibt das ein vbs besser ist hat man ja seine meinung kund getan und es wird verstanden.!

in diesem sinne allen einen schönen tag.

mfg
Nobbi.the.Great
Nobbi.the.Great 26.01.2012 um 15:20:32 Uhr
Goto Top
Hallo liebe Script-Freunde

Sollte es Jemanden interessieren ...

Ich habe aus den hier vorliegenden Informationen ein Backupscript gefrickelt. Gilt für alle seit Datum x getouchten Dateien, bzw allen, wenn es noch kein Backup gibt. Ich habe dazu das Datum um 1 Monat zurück gedreht, Backup wird aber per Geplanten Task einmal die Woche des nachtens aufgerufen und auf einen WinXP-Rechner im Netwerk abgelegt.

@echo off & setlocal
title Sicherung l„uft ...

set "G=%temp%\monthago.vbs"  

REM Temporäres VBScript für die Datumsberechnung wird erzeugt. In diesem Falle wird der Monat um einen nach hinten geschoben (,-1,Date).

>%G% echo wscript.echo DateAdd("m",-1,Date)  
for /f %%i in ('cscript //nologo %G%') do set "monthago=%%i"  
del %G%

set "Datum=%monthago:~-7,2%-%monthago:~-4%"   

REM Dies dient dem Anpassen der Datumsausgabe, da sie als Variable für xcopy benötigt wird in mm-dd-yy

FOR /F "tokens=1,2,3 delims=/. " %%a in ('date /t') do set FDATE=%%a  
set cdate=%datum:~5,7%
set ddate=%datum:~0,2%

REM Jetzt folgt der eigentliche Backup-Vorgang - Zugriff auf Ziel sollte bestehen, ich habe an dieser stelle noch ein *net use Zielsystem /user:* hinter dem ping gesetzt.

ping -n 2 -w 20 BackupComputer >nul || goto :exit

if exist \\Zielpfad\Verzeichnis goto :Teilsicherung
if not exist \\Zielpfad\Verzeichnis goto :Vollsicherung

:Vollsicherung
xcopy C:\Test \\Zielpfad\Verzeichnis /y /k /r /i /q
goto :exit

:Teilsicherung
xcopy C:\Test \\Zielpfad\Verzeichnis /y /k /r /i /q /d:%ddate%-%FDATE%-%cdate%  

:exit

Das spart Traffic, schont die Platte und geht schneller, es sei denn, es handelt sich um Dateien die andauernd alle angefasst werden und somit stehts aktuell sind.
Für Optimierungen bin ich immer zu haben.

Script läuft bei mir sehr gut, einzig eine abgebrochene Vollsicherung wird nicht erkannt. Ich schreibe nochmal um auf eine Fertigstellungs.log die es nur gibt, wenn Vollsicherung komplett durchgelaufen ist.


Wie gesagt, für Verbesserungen bin ich gern zu haben.


Gruß an Alle