Batch Sicherung der Dateien der letzten 18 Monate
Fachfrage
Ein Hallo in Runde,
ich habe eine Fachfrage und keine Ahnung ob es dafür überhaupt eine Lösung gibt.
Ich möchte alle Ordener/Verzeichnisse eines Laufwerks X auf ein Laufwerk Y kopieren.
Und jetzt käme mein Problem. Ich möchte, dass sobald ich die batch-Datei starte, dass alle Datein die auf dem Laufwerk X älter als 18 Monate sind auf das Laufwerk Y kopiert werden.
Wenn ich mit xcopy /d ein Datum definiere, kopiert er jedoch immer nur die Daten von diesem Zeitpunkt bis jetzt. Wie könnte ich vorgehen???
(Robocopy kann ich nicht verwenden)
Vielen Dank im voraus.
Ein Hallo in Runde,
ich habe eine Fachfrage und keine Ahnung ob es dafür überhaupt eine Lösung gibt.
Ich möchte alle Ordener/Verzeichnisse eines Laufwerks X auf ein Laufwerk Y kopieren.
Und jetzt käme mein Problem. Ich möchte, dass sobald ich die batch-Datei starte, dass alle Datein die auf dem Laufwerk X älter als 18 Monate sind auf das Laufwerk Y kopiert werden.
Wenn ich mit xcopy /d ein Datum definiere, kopiert er jedoch immer nur die Daten von diesem Zeitpunkt bis jetzt. Wie könnte ich vorgehen???
(Robocopy kann ich nicht verwenden)
Vielen Dank im voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 27.07.2009 um 19:39:06 Uhr
So, den Beitrag schließ ich jetzt aber ganz schnell.
Grüße
Biber
Grüße
Biber
Content-ID: 120479
Url: https://administrator.de/forum/batch-sicherung-der-dateien-der-letzten-18-monate-120479.html
Ausgedruckt am: 23.12.2024 um 17:12 Uhr
26 Kommentare
Neuester Kommentar
Moin,
wenn es denn wirklich nicht via Robocopy laufen darf, dann ist "stricken" angesagt
Xcopy wäre schon mal ein guter Ansatz.
Schau dir mal den Schalter /exclude an - da kannst du auch eine Liste anfügen.
Nun wirds "komplex" - du mußt diese Liste (mit allen Dateien - die nicht älter als 18 Monate sind) vorher irgendwie erzeugen.
Da hätte ich zwar auch Ideen, die rel. sicher von einem der beiden Bs (aus diesem B Bereich) inspiriert sind -aber im Moment brennt bei uns die Hütte.
Datei Datum - sollte dein Suchansatz werden.
Gruß
wenn es denn wirklich nicht via Robocopy laufen darf, dann ist "stricken" angesagt
Xcopy wäre schon mal ein guter Ansatz.
Schau dir mal den Schalter /exclude an - da kannst du auch eine Liste anfügen.
Nun wirds "komplex" - du mußt diese Liste (mit allen Dateien - die nicht älter als 18 Monate sind) vorher irgendwie erzeugen.
Da hätte ich zwar auch Ideen, die rel. sicher von einem der beiden Bs (aus diesem B Bereich) inspiriert sind -aber im Moment brennt bei uns die Hütte.
Datei Datum - sollte dein Suchansatz werden.
Gruß
Moin Koido1,
schau mal hier, ich denke das hilft :
Ältere Dateien (7 Tage) automatisch verschieben - Problem mit Verzeichnisstruktur
schau mal hier, ich denke das hilft :
Ältere Dateien (7 Tage) automatisch verschieben - Problem mit Verzeichnisstruktur
Zitat von @crashzero2000:
Moin Koido1,
schau mal hier, ich denke das hilft :
Ältere Dateien (7 Tage) automatisch verschieben - Problem mit Verzeichnisstruktur
Moin Koido1,
schau mal hier, ich denke das hilft :
Ältere Dateien (7 Tage) automatisch verschieben - Problem mit Verzeichnisstruktur
Servus,
wobei - wenn der Grund - nicht Robocopy nutzen zu dürfen - um "sicher" zu sein, dass das Backup wirklich überall läuft - was eine Annahme meinerseits ist...
Dann wäre auch forfiles keine Alternative.
Warten wir das Feedback der bisherigen Beiträge ab.
Gruß
Also bin ich auf xcopy angewiesen. Mit exclude kann ich doch keine
Daten ausfiltern, oder etwa doch? Ich dachte bisher immer nur an das
Herausfiltern für bestimmte Dateien, z.B. *doc oder *pdf.
Daten ausfiltern, oder etwa doch? Ich dachte bisher immer nur an das
Herausfiltern für bestimmte Dateien, z.B. *doc oder *pdf.
Rem ich bin ein Beispiel - in Pfad sollten .ini und andere Dateien sein
dir /b Pfad:\*.ini > Pfad:\bsp.log
xcopy Pfad:\*.* Pfad2:\ /exclude:Pfad:\bsp.log
feuerst du diese batch ab - kopiert er alle Dateien, außer den .inis von Pfad nach Pfad2
Gibt es bei xcopy nicht auch sowas wie /MINLAD?
Nicht das ich wüßte, deshalb sind ja die Tools vom Reskit da.xcopy /?
dir /?
Wie gesagt, das (mit den Monaten ausrechnen) wird "fummelei" und Ansatzweise funktioniert das auch, aber wehe - ein englisches System ist dabei.
daher hab ich da nix aus der Schublade...
Viele Grüße
Gruß
Wie gesagt, dann bau dir mit AutoIT was selbst. Die Exe-Dateien die da rauskommen kannst du genauso weitergeben oder verkaufen oder was auch immer wie deine Batch-Datei.
Für alles was auch nur halbwegs mit Auswertungen oder Berechnungen etc zu tun hat verwende ich mittlerweile AutoIT. Batch-Scripting ist mir da in meinen Augen zu unnötig kompliziert.
Für alles was auch nur halbwegs mit Auswertungen oder Berechnungen etc zu tun hat verwende ich mittlerweile AutoIT. Batch-Scripting ist mir da in meinen Augen zu unnötig kompliziert.
Moin Koido1,
willkommen im Forum.
Macht da mal nicht so ein Heckmeck drum um das bisschen Anforderung.
Wenn es halt nur nur XCopy sein darf - ja hey! Dann machen wir es halt damit.
MacGuywer hat schon mal mit zwei Büroklammern und einer Wärmflasche das AKW Krümmel repariert.
Oder war das Vattenfall selbst? Egal.
Also:
Xcopy kann nicht: Nur alle Dateien (ggf. in Unterverzeichnissen) kopieren, die ÄLTER sind als Datum x.
Is' nu' mal so.
Aber:
Xcopy kann prima: Nur alle Dateien (ggf. in Unterverzeichnissen) kopieren, die JÜNGER sind als Datum x.
Reicht doch.
Du sagst: "ich soll alle Dateien älter als 18 Monate wegkopieren"....
...okay... ich könnte doch ebenso umformulieren:
"ich soll alle Dateien kopieren ausgenommen Dateien jünger als 18 Monate"
Und ein "Kopieren von allen Dateien /Excluded bestimmte" ..das kann XCopy.
Is' sich sein Job.
Formulieren wie die Ausschlussbedingung um:
-> "außer die, die jünger sind als 18 Monate" ==> Flapsiger formuliert: = "außer die nach dem 01.01.2008"
Diese kann XCopy anlisten mit dem Schalter /L
Demo:
[Alles Test am CMD-Prompt; das ">" am Zeilenanfang kennzeichnet einzutippselnde Befehle]
Mit dieser Beispielzeile simuliere ich ein XCopy von allen Dateien von "d:\temp\backup1" und darunter nach "f:\ggg\".
Wobei das Verzeichnis "\ggg\" nicht existiert und nicht existieren muss - das Laufwer "F:" dagegen muss da sein.
Außerdem sage ich mit der Bedingung /D.01-01-2008 "nur alles vom oder nach dem 1.Januar 2008".
[Achtung: Format ist MM-TT-YYYY!, s. XCopy / ?]
Alle Dateien werden zwar nur angelistet [Schalter /L], aber dennoch erscheint eine Meldung "x Datei(en) kopiert."
Wenn ich diese Meldung entsorge und den Output in eine Textdatei schreibe, habe ich meine EXCLUDE-Liste.
[Alles Test am CMD-Prompt; das ">" am Zeilenanfang kennzeichnet einzutippselnde Befehle]
:Und was jetzt OHNE die "x Datei(en) kopiert" aufm Schirm ist, will ich lieber in einer Datei:
Jetzt kannst Du das eigentlich gewünschte XCopy-Kommandochen abfeuern:
[Anmerkung] ....und auch das könntest Du zuerst mit dem Schalter /L gefahrlos testen:
[/Anmerkung]
Fazit:
2 Zeilen mit "Xcopy" nacheinander vom CMD-Prompt abgeschossen...
..da brauchen wir doch nicht ein halbes Dutzend erwachsene Admins mit beschäftigen.
Grüße
Biber
willkommen im Forum.
Macht da mal nicht so ein Heckmeck drum um das bisschen Anforderung.
Wenn es halt nur nur XCopy sein darf - ja hey! Dann machen wir es halt damit.
MacGuywer hat schon mal mit zwei Büroklammern und einer Wärmflasche das AKW Krümmel repariert.
Oder war das Vattenfall selbst? Egal.
Also:
Xcopy kann nicht: Nur alle Dateien (ggf. in Unterverzeichnissen) kopieren, die ÄLTER sind als Datum x.
Is' nu' mal so.
Aber:
Xcopy kann prima: Nur alle Dateien (ggf. in Unterverzeichnissen) kopieren, die JÜNGER sind als Datum x.
Reicht doch.
Du sagst: "ich soll alle Dateien älter als 18 Monate wegkopieren"....
...okay... ich könnte doch ebenso umformulieren:
"ich soll alle Dateien kopieren ausgenommen Dateien jünger als 18 Monate"
Und ein "Kopieren von allen Dateien /Excluded bestimmte" ..das kann XCopy.
Is' sich sein Job.
Formulieren wie die Ausschlussbedingung um:
-> "außer die, die jünger sind als 18 Monate" ==> Flapsiger formuliert: = "außer die nach dem 01.01.2008"
Diese kann XCopy anlisten mit dem Schalter /L
Demo:
[Alles Test am CMD-Prompt; das ">" am Zeilenanfang kennzeichnet einzutippselnde Befehle]
>xcopy /L /d:01-01-2008 /s /e d:\temp\backup1 f:\ggg\
D:\temp\backup1\Backup.bkf
D:\temp\backup1\WINDOWS\win.ini
D:\temp\backup1\WINDOWS\system\test.txt
3 Datei(en) kopiert
Mit dieser Beispielzeile simuliere ich ein XCopy von allen Dateien von "d:\temp\backup1" und darunter nach "f:\ggg\".
Wobei das Verzeichnis "\ggg\" nicht existiert und nicht existieren muss - das Laufwer "F:" dagegen muss da sein.
Außerdem sage ich mit der Bedingung /D.01-01-2008 "nur alles vom oder nach dem 1.Januar 2008".
[Achtung: Format ist MM-TT-YYYY!, s. XCopy / ?]
Alle Dateien werden zwar nur angelistet [Schalter /L], aber dennoch erscheint eine Meldung "x Datei(en) kopiert."
Wenn ich diese Meldung entsorge und den Output in eine Textdatei schreibe, habe ich meine EXCLUDE-Liste.
[Alles Test am CMD-Prompt; das ">" am Zeilenanfang kennzeichnet einzutippselnde Befehle]
>xcopy /L /d:01-01-2008 /s /e d:\temp\backup1 f:\ggg\ |find /v "Datei(en)"
D:\temp\backup1\Backup.bkf
D:\temp\backup1\WINDOWS\win.ini
D:\temp\backup1\WINDOWS\system\test.txt
>xcopy /L /d:01-01-2008 /s /e d:\temp\backup1 f:\ggg\ |find /v "Datei(en)" >%temp%\myExclude.Lst
Jetzt kannst Du das eigentlich gewünschte XCopy-Kommandochen abfeuern:
xcopy /Exclude:%temp%\myExclude.Lst /s /e d:\temp\backup1 f:\ggg\
xcopy /L /Exclude:%temp%\myExclude.Lst /s /e d:\temp\backup1 f:\ggg\
Fazit:
- geht mit XCopy und ohne RobosonstwasCopy
- geht ohne Batchkenntnisse
- geht ohne Assemblerprogrammierung zur Datumskonvertierung
2 Zeilen mit "Xcopy" nacheinander vom CMD-Prompt abgeschossen...
..da brauchen wir doch nicht ein halbes Dutzend erwachsene Admins mit beschäftigen.
Grüße
Biber
Moin Koido1,
Wassn das fürn Laden? Gibts doch wieder ABM-Stellen?
Na egal, wenn Du wenigstens im Gegenzug die Rechtschreibfehler im Titel korrigierst und den Beitrag auf "Erledigt" setzt,
dann kannst Du einen schnell zusammengeschroteten Zweizeiler dafür haben.
Die Batch- bzw.CMD-Befehle kennen keine Datumsarithmetik... also "Datum minus 3 Wochen" oder "11.4.2003 plus 20 Monate".
Aber Du kannst jemand fragen, der etwas davon versteht - also zum Beispiel die VBSkript oder JScript-Engines, die auf (fast)jedem Windowsrechner ohnehin nichtstuend rumliegen.
Wenn Du den obigen Schnipsel so aufrufst:
[ wieder gilt: ">" am Zeilenanfang ist mein CMD-Prompt->nicht mit eingeben]
bekommst du die Ausgabe (das Datum heute vor 18 Monaten) im XCopy-Format.
Wenn Du das ganze in einer Batchvariable verwenden willst, dann baue in Deinen Sicherungsjob ein:
Grüße
Biber
Zitat von @Koido1:
Hallo Biber,
das mit dem Datum funktioniert. Habe immer mit Monat 8 probiert.
Juli ist aber 7 und August haben wir noch nicht. Das funktioniert!!!!!!!!!!!
Hab ich doch gleich gesagt.Hallo Biber,
das mit dem Datum funktioniert. Habe immer mit Monat 8 probiert.
Juli ist aber 7 und August haben wir noch nicht. Das funktioniert!!!!!!!!!!!
Meine zweiter Frage wäre, ob man das Datum auch dynamisch machen kann.
Klar. Lerne zu skripten.Damit müsste ich es nicht jeden Tag von Hand ändern
Wie? Du bist eingestellt worden, damit Du jeden Tag alles sicherst, was älter ist als 18 Monate?Wassn das fürn Laden? Gibts doch wieder ABM-Stellen?
Na egal, wenn Du wenigstens im Gegenzug die Rechtschreibfehler im Titel korrigierst und den Beitrag auf "Erledigt" setzt,
dann kannst Du einen schnell zusammengeschroteten Zweizeiler dafür haben.
'DateBeforeXMonth.vbs -Hilfsschnipsel
d = dateadd("m", wscript.arguments(0), date )
' Variable d würde "16.01.2008" enthalten
' wenn heute =15.7.2009 wäre und Parameter gleich (-18) [monate]
Wscript.echo (month(d) &"-"& day(d) & "-" & year(d) )
' aber jetzt wird das "16.01.2008" ausgegeben als "1-16-2008" für XCopy
Die Batch- bzw.CMD-Befehle kennen keine Datumsarithmetik... also "Datum minus 3 Wochen" oder "11.4.2003 plus 20 Monate".
Aber Du kannst jemand fragen, der etwas davon versteht - also zum Beispiel die VBSkript oder JScript-Engines, die auf (fast)jedem Windowsrechner ohnehin nichtstuend rumliegen.
Wenn Du den obigen Schnipsel so aufrufst:
[ wieder gilt: ">" am Zeilenanfang ist mein CMD-Prompt->nicht mit eingeben]
>cscript e:\schnipsel\DateBeforeXmonth.vbs -18
1-16-2008
Wenn Du das ganze in einer Batchvariable verwenden willst, dann baue in Deinen Sicherungsjob ein:
....
FOR /F %%i in ('cscript x:\DeinPfad\DateBeforeXmonth.vbs -18') do Set "xcDate=%%i"
:: Danach steht in %xcDate% der Wert "1-16-2008", den Du brauchst
....
Grüße
Biber
Moin Koido1,
am Rande von Geesthast geschrieben... das übt.
(Oder vom "Dudn"??) . Welche hast duden?
Okay, genug gekalauert.
Wenn Du mal "editierst", dann siehst Du wie einfach Code-Formatierungen hier sind.
Ist 100%ig der richtige Weg zu testen.
Ich denke, Du hast mindestens einen der beiden folgenden Tippfehler drin:
BTW: ich habe den Parameter "wieviel Monate rückrechnen" aus alter Angewohnheit mit eingebaut, um einen Hauch Flexibilität mit reinzubringen.
Wenn sich bei Dir die Anforderung NIE ändert (immer exakt 18 Monate zurück), dann machen wir es OHNE Parameter.
Nimm diese abgespeckte Version und probier es nochmal vom CMD-Prompt bitte.
Ich hatte oben einen Tippfehler bei mit drin im letzten Codefragment ("..doset .." statt richtig "...do set..").
Ist bei mir berichtigt, Du hast ihn aber natürlich übernommen. Siehe oben.
Grüße
Biber
Langsam kommst Du mir wirklich wie MacGyver, seit Ihr verwandt?
Na ja, ich habe die Störfall-Verwaltung für einen ungenannt bleiben wollenden Siedewasserreaktoram Rande von Geesthast geschrieben... das übt.
PS: Überschrift auftragsgemäß geändert.
Komisch - da steht doch immer noch "Datein". Vielleicht habe ich aber auch eine ältere Auflage vom Duden.(Oder vom "Dudn"??) . Welche hast duden?
Okay, genug gekalauert.
Ich habe jetzt mal ...
Ich habe jetzt mal deine Codezeilen in Code-Tags gesetzt.Wenn Du mal "editierst", dann siehst Du wie einfach Code-Formatierungen hier sind.
Ich habe jetzt mal ...
cscript "X:\quelle...\datebeforemonth.vbs -18 in den CMD-Prompt eingegeben, da wird ausgegeben:
Eingabefehler: Für die Dateierweiterung ".vbs -18" gibt es kein Skriptmodul.
cscript "X:\quelle...\datebeforemonth.vbs -18 in den CMD-Prompt eingegeben, da wird ausgegeben:
Eingabefehler: Für die Dateierweiterung ".vbs -18" gibt es kein Skriptmodul.
Ist 100%ig der richtige Weg zu testen.
Ich denke, Du hast mindestens einen der beiden folgenden Tippfehler drin:
- entweder nur ein öffnendes Anführungszeichen (und kein zweites) wie oben gepostet
- und/oder KEIN Leerzeichen zwischen "...skriptname.vbs" und dem Parameter "minus 18"
BTW: ich habe den Parameter "wieviel Monate rückrechnen" aus alter Angewohnheit mit eingebaut, um einen Hauch Flexibilität mit reinzubringen.
Wenn sich bei Dir die Anforderung NIE ändert (immer exakt 18 Monate zurück), dann machen wir es OHNE Parameter.
'---' datebeforemonthvbs ohne Parameter.vbs
d = dateadd("m", -18), date )
Wscript.echo (month(d) &"-"& day(d) & "-" & year(d) )
Nimm diese abgespeckte Version und probier es nochmal vom CMD-Prompt bitte.
Ich hatte oben einen Tippfehler bei mit drin im letzten Codefragment ("..doset .." statt richtig "...do set..").
Ist bei mir berichtigt, Du hast ihn aber natürlich übernommen. Siehe oben.
Grüße
Biber
Moin Koido,
dann lass uns dieses Detail noch mal Schritt für Schritt durchkaspern.
Bitte öffne einen CMD-Prompt ("Start"-"Bearbeiten"-cmd eintippen)
Dann alle Zeilen die bei mir mit ">" gekennzeichnet sind einzeln per Copy and Paste übernehmen und abschicken
und zwar ohne das erste ">"-Zeichen
(ACHTUNG erste Zeile INKLUSIVE eines ">"-Zeichens am Anfang)
<code tape="plain">
(=15:55:33 D:\temp=)
(=15:55:38 D:\temp=)
(=15:55:45 D:\temp=)
(=15:56:01 D:\temp=)
Das ausgegebene Ergebnis sollte bei Dir genauso aussehen.
Wenn das passt, machen wir den Rest.
Grüße
Biber
dann lass uns dieses Detail noch mal Schritt für Schritt durchkaspern.
Bitte öffne einen CMD-Prompt ("Start"-"Bearbeiten"-cmd eintippen)
Dann alle Zeilen die bei mir mit ">" gekennzeichnet sind einzeln per Copy and Paste übernehmen und abschicken
und zwar ohne das erste ">"-Zeichen
(ACHTUNG erste Zeile INKLUSIVE eines ">"-Zeichens am Anfang)
<code tape="plain">
dateMinus18.vbs echo d=dateadd("m",-18, date): Wscript.echo (month(d) ^&"-"^& day(d) ^& "-" ^& year(d))
(=15:55:33 D:\temp=)
type dateminus18.vbs
d=dateadd("m",-18, date): Wscript.echo (month(d) &"-"& day(d) & "-" & year(d))(=15:55:38 D:\temp=)
cscript dateminus18.vbs
1-17-2008(=15:55:45 D:\temp=)
for /f %i in ('cscript dateminus18.vbs') do @set "xcDate=%i"
(=15:56:01 D:\temp=)
set xc
xcDate=1-17-2008Das ausgegebene Ergebnis sollte bei Dir genauso aussehen.
Wenn das passt, machen wir den Rest.
Grüße
Biber
Moin Koido1,
wo klemmt es denn jetzt noch?
Wenn der von mir zuletzt gepostete Schnipsel bei Dir so tut, was ein Schnipsel eben tun soll, dann...
Übernimm aus meinem Kommentar vom 17.07.09 15:59
Grüße
Biber
wo klemmt es denn jetzt noch?
Wenn der von mir zuletzt gepostete Schnipsel bei Dir so tut, was ein Schnipsel eben tun soll, dann...
Übernimm aus meinem Kommentar vom 17.07.09 15:59
- die Zeile 1 in deinen Batch (damit erzeugst Du eine "dateMinus18.vbs" im aktuellen Verzeichnis)
- oder (empfohlene Variante) erzeuge statt ">>dateMinus18.vbs" lieber eine ">>%temp%\dateminus18.vbs" im %temp%-Verzeichnis, weil dort immer und für jeden Schreibrechte gegeben sind
- Rufe das Script auf wie oben in Zeile 12 gezeigt, aber im Batch zwei Prozentzeichen (%%i) statt einem (%i)
- danach hast Du Deine Variable %xcDate%, die Du in Deinem XCopy-Aufruf verwenden kannst.
Grüße
Biber
Moin Koido1,
Dann können wir noch mal drüber diskutieren, was Stress ist.
Versuch es so:
[Zusammengestoppel aus den Resten von ganz oben (1.Biber-Kommentar und Deinem Ansatz]
[ungetestet]
Grüße
Biber
hach wenn ich nur wüsste, wo es klemmt. Ich rauf mir schon die Haare aus.
Hach, wenn dabei schon die Nerven blank liegen liegen, dann solltest Du Dich mal mit meiner Ex-Schwiegermutter in den Sommerschlussverkauf stürzen.Dann können wir noch mal drüber diskutieren, was Stress ist.
Versuch es so:
[Zusammengestoppel aus den Resten von ganz oben (1.Biber-Kommentar und Deinem Ansatz]
@echo off & Setlocal
>%temp%\dateMinus18.vbs echo d=dateadd("m",-18, date): Wscript.echo (month(d) ^&"-"^& day(d) ^& "-" ^& year(d))
FOR /F %%i in ('cscript %temp%\dateMinus18.vbs') do @set "XCDate=%%i
xcopy /L /d:%XCDate% /s /e /y /i "X:\quelle" "Y:ziel" |find /v "Datei(en)" >%temp%\myExclude.Lst
xcopy /Exclude:%temp%\myExclude.Lst /s /e /y /i "X:quelle" "Y:ziel"
[ungetestet]
Grüße
Biber