tommhii
Goto Top

Sicherung mit xcopy

Hallo
ich möchte mit xcopy 1 mal monatlich eine Sicherung von verschiedenen Ordner die folgendeNamen haben PC10ttmmjj

ich habe mir eine Batch erstellt und möchte mit dieser aus einen Ordner nur die Ordner kopieren die vom Vormonat sind
meine Ordnerstruktur sieht so aus c:\Datei\PC10ttmmjj es befinden sich aber auch Ordner in dem Datei Ordner die aus dem aktuellen Monat sind die sollen aber nicht mit kopiert werden leider funktioniert es nicht so wie es soll
echo off
set jahr=%date:~-2,2%
set monat=%date:~-7,2%
set /a vormonat=%date:~-7,2%-1
xcopy c:\DATEI\PC*0%vormonat%%jahr% c:\tool /S /E /Y /I
pause

er kopiert mir alle PCxxxxx Ordner vom vormonat und vom aktuellen Monat aber auch die Dateien die sich in dem Ordner befinden werden nicht mit kopiert

kann mal jemand sich das anschauen was ich falsch mache
danke im voraus

Content-ID: 112188

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

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

bastla
bastla 23.03.2009 um 22:55:21 Uhr
Goto Top
Hallo tommhii und willkommen im Forum!

Etwa so:
echo off & setlocal
set "jahr=%date:~-4%"  
set /a vormonat=1%date:~-7,2%-1
set "vormonat=%vormonat:~-2%"  
if %vormonat%==00 (
    set "vormonat=12"  
    set /a jahr-=1
)
set "jahr=%jahr:~-2%"  
for /d %%i in ("C:\DATEI\PC10??%vormonat%%jahr%") do xcopy "%%i" "C:\tool\%%~nxi\" /E /Y >nul  
Grüße
bastla

[Edit] Anführungszeichen in Zeile 2 ergänzt [/Edit]
Globetrotter
Globetrotter 23.03.2009 um 22:59:22 Uhr
Goto Top
er kopiert mir alle PCxxxxx Ordner vom vormonat und vom aktuellen
Monat aber auch die Dateien die sich in dem Ordner befinden werden
nicht mit kopiert

Nabend,
wenn die Dateien nicht mit "PC" beginnen, dann können Sie nicht kopiert werden da Du die Waldcard für die Dateien auf "PC" gesetzt hast.

Gruss

Ps: Bastla hat den Nagel auf den Kopf getroffen ;)
tommhii
tommhii 24.03.2009 um 07:45:00 Uhr
Goto Top
ja Hallo
danke für die schnelle Antwort hab mich oben verschrieben
der Ordner heißt PCttmmjj die kopiert werden sollen
davon befinden sich für fast jeden Tag Ordner im Ordner Datei z.b.
PC010209 ;PC020209..... natürlich auch Ordner vom aktuellen Monat
ich möchte aber bloß die vom Vormonat kopieren die anderen sollen stehen bleiben.
hab das script mal probiert bringt immer unzulässige Parameter anzahl
ich hab mal ein Echo auf %vormonat%%jahr% gemacht raus kommt 029 das Jahr sollte auch 2 stellig sein kann es daran liegen ?
was bedeutet %%~nxi

Gruss
bastla
bastla 24.03.2009 um 08:54:01 Uhr
Goto Top
Hallo tommhii!
raus kommt 029 das Jahr sollte auch 2 stellig sein kann es daran liegen ?
Am Ende der Zeile 2 befindet sich vermutlich ein Leerzeichen - verwende besser die folgende Zeile (ich ändere das auch oben):
set "jahr=%date:~-4%"
was bedeutet %%~nxi
Damit wird der Ordnername und auch der "Typ" (der Teil nach dem letzen Punkt des Ordnernamens - Punkt gibt es zwar derzeit nicht, aber der Batch wäre vorsorglich darauf vorbereitet) aus dem Pfad extrahiert - siehe "for /?" gegen Ende ...

Grüße
bastla
tommhii
tommhii 24.03.2009 um 15:33:15 Uhr
Goto Top
Danke super hat geklappt

nun hab ich noch eine Frage ich habe noch einen Ordner in dem befinden sich mehrere Zip Archive alle von einen anderen Datum
wie kann man hier die Zip Archive vom Vormonat mit xcopy in einen anderen Ordner kopieren wenn der Name kein Datum enthält

Danke schon mal
bastla
bastla 24.03.2009 um 20:58:34 Uhr
Goto Top
Hallo tommhii!

Das sollte etwa so gehen:
echo off & setlocal
set "jahr=%date:~-4%"  
set /a vormonat=1%date:~-7,2%-1
set "vormonat=%vormonat:~-2%"  
if %vormonat%==00 (
    set "vormonat=12"  
    set /a jahr-=1
)
for %%i in ("C:\DATEI\*.zip") do echo %%~ti|findstr "\.%vormonat%\.%jahr%">nul && xcopy "%%i" "C:\tool\" >nul  
Grüße
bastla
tommhii
tommhii 25.03.2009 um 10:08:08 Uhr
Goto Top
danke hat super geklappt
eine frage hätte ich trotzdem noch wie kann man Dateien löschen die zum Beispiel älter als 30 Tage sind
bastla
bastla 25.03.2009, aktualisiert am 18.10.2012 um 18:37:54 Uhr
Goto Top
Hallo tommhii!

Dazu solltest Du eine Menge Beiträge (wie etwa jenen) finden ...

Grüße
bastla
tommhii
tommhii 16.04.2009 um 14:49:23 Uhr
Goto Top
danke für die Info kann das Tool delage32 nicht verwenden ich habe Ordner mit der Bezeichnung PC200808 PC200807 PC200901 also im Namen steht hinter PC das Jahr und der Monat in dem die Ordner erstellt wurden nun meine Frage kann mit Hilfe einer Batch sagen lösche mir den Ordner der 6 monate alt ist die 6 Monate bezogen auf den Ordnernamen. irgendwie komm ich bei Jahres wechsel nicht hin
Danke erstmal im voraus
bastla
bastla 16.04.2009 um 17:13:11 Uhr
Goto Top
Hallo tommhii!

Soferne Dich der Variablenname %Vormonat% in diesem Zusammenhang nicht stört, wäre nur eine geringe Änderung des obigen Ansatzes erforderlich:
echo off & setlocal
set "jahr=%date:~-4%"  
set /a vormonat=1%date:~-7,2%-6
if %vormonat% leq 100 (
    set /a vormonat+=12
    set /a jahr-=1
)
set "vormonat=%vormonat:~-2%"  
echo rd /s /q "C:\DATEI\PC%jahr%%vormonat%"  
Das "echo" vor dem Löschbefehl soll ein entspanntes Testen erlauben, da so der Befehl zum Löschen des Ordners nur angezeigt wird ...

Grüße
bastla
tommhii
tommhii 17.04.2009 um 11:46:58 Uhr
Goto Top
klappt super
nun hab ich noch eine Frage ich habe in einen Test ordner ca 400 - 500 Dateien mit dem Dateinamen pip.20090331010015118 diese möchte ich wenn sie 15 Tage alt sind löschen lassen das datum steht im Dateinamen pip.jjjjmmtt010015118 ist das machbar

danke im voraus
bastla
bastla 17.04.2009 um 12:15:43 Uhr
Goto Top
Hallo tommhii!

Um nicht zu diesem Zweck auch noch mit native Batch herumspielen zu müssen (das würde unnötig aufwändig), verwendet der folgende Ansatz ein wenig (integriertes) VBScript (es bleibt aber dennoch ein Batch).

Soferne ich das richtig verstanden habe und die vollständigen Dateinamen tatsächlich "
pip.jjjjmmtt010015118" lauten (und daher nur der Datumsanteil variabel ist), sollte sich das so machen lassen:
@echo off & setlocal
set "Ordner=D:\Test"  
set "Maske=pip.????????010015118"  
set "Alter=15"  

set S=%temp%\Stichtag.vbs
>%S% echo wscript.echo dateAdd("d",-%Alter%, Date())  
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %S%') do set "Stichtag=%%c%%b%%a"  

for %%i in ("%Ordner%\%Maske%") do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "Dateidatum=%~x1"  
set "Dateidatum=%Dateidatum:~,8%"  
if %Dateidatum% leq %Stichtag% echo del %1
goto :eof
Auch hier wieder zur Sicherheit ein "echo" vor dem Löschbefehl ...

Grüße
bastla
tommhii
tommhii 17.04.2009 um 13:02:26 Uhr
Goto Top
danke für deine schnelle Hilfe aber auch der Zahlenteil im Namen ist variabel
für was hast du die Fragezeichen eingetragen im Dateinamen

grüße tom
bastla
bastla 17.04.2009 um 13:35:05 Uhr
Goto Top
Hallo tommhii!

Je genauer die Angabe in der Maske, desto geringer das Risiko, dass falsche Dateien erfasst werden - daher auch die Fragezeichen, welche für jeweils ein variables Zeichen (hier also für die insgesamt 8 Zeichen des Datums) gelten. Eine Datei "pip.200904010015118" würde damit zB nicht gefunden.

Wenn auch der Teil nach dem Datum variabel ist, dann wirst Du die Maske "unschärfer" machen müssen, indem Du sie auf "pip.*" reduzierst ...

Grüße
bastla
tommhii
tommhii 21.04.2009 um 14:29:28 Uhr
Goto Top
okay hab das soweit ich hab jetzt nur noch eine Frage wenn ich mit dem Batch Dateien lösche hab ich da die Möglichkeit eine log datei zu erstellen die mir auf zeigt welche Dateien gelöscht wurden .

grüße tom
bastla
bastla 21.04.2009 um 18:15:45 Uhr
Goto Top
Hallo tommhii!
Möglichkeit eine log datei zu erstellen
Ungetestet etwa so:
@echo off & setlocal
set "Ordner=D:\Test"
set "Maske=pip.????????010015118"
set "Alter=15"
set "Log=D:\Geloescht.txt"

set S=%temp%\Stichtag.vbs
>%S% echo wscript.echo dateAdd("d",-%Alter%, Date())
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %S%') do set "Stichtag=%%c%%b%%a"

if exist "%Log%" del "%Log%"
for %%i in ("%Ordner%\%Maske%") do call :ProcessFile "%%i"
goto :eof

:ProcessFile
set "Dateidatum=%~x1"
set "Dateidatum=%Dateidatum:~,8%"
if %Dateidatum% leq %Stichtag% (
    del %1
    >>"%Log%" echo %~1
)
goto :eof
Grüße
bastla
tommhii
tommhii 23.04.2009 um 08:47:54 Uhr
Goto Top
Danke erstmal für deine schnelle Hilfe hab das mal angepasst und mal getestet geht aber nicht so richtig .
Ist das möglich das etwas einfacher zu gestalten wenn ich zum Beispiel folgenden Batch habe
@echo off & setlocal
set "Log=D:\Geloescht.txt"
for %%i in ("d:\Test\pip.20090408010015118") do del "%%i" >>"%Log%"

dsa wenn er die Datei findet und löscht er mir das protokolliert

Gruß tom
bastla
bastla 23.04.2009 um 10:51:24 Uhr
Goto Top
Hallo tommhii!
... geht aber nicht so richtig .
Ziemlich aufschlussreiche Fehlerbeschreibung ...

Soferne der Batch vorher funktioniert hat, sollte auch das Log geschrieben werden - poste daher bitte den letzten funktionierenden Code.
Eine Anzeige der gelöschten Dateien ließe sich mit dem Zusatz "/S" erzeugen - dann wären allerdings auch alle Unterordner davon betroffen. Sollte das kein Problem sein (weil es zB keine Unterordner gibt), würde auch
del /S "d:\Test\pip.20090408*">>"%Log%"
genügen - hier wäre dann eine möglichst genaue Dateimaske ("pip.20090408*") besonders anzuraten.

Grüße
bastla
tommhii
tommhii 23.04.2009 um 14:04:29 Uhr
Goto Top
Ja sorry der script löscht alle Dateien und nicht wie gefordert die vom 08042009
das mit dem Log habe ich hin bekommen. ich habe versucht die Dateien die von dem vorgegebenen Datum zu löschen sind noch zu zählen. aber haut irgendwie nicht hin sagt immer als ergebnis 0

set "Loedatei=d:\Test\pip.20090408*"
set "Log=d:\test\Geloescht%Date%.txt"
set /a ikto=0
for %%i in (%Loedatei%) do set /a
ikto=ikto + 1
if not exist %Loedatei% Goto Weiter
del %Loedatei%
echo %ikto% %Loedatei% am %Date% %Time%gelöscht >>"%Log%"

grüße tom
bastla
bastla 23.04.2009 um 14:15:00 Uhr
Goto Top
Hallo tommhii!

Sollte so einfacher gehen:
set "Loedatei=d:\Test\pip.20090408*"  
set "Log=d:\test\Geloescht%Date%.txt"  
set ikto=0
for /f %%i in ('dir /w "%Loedatei%" 2^>nul^|findstr "Datei(en)"') do set "ikto=%%i"  
del "%Loedatei%" 2>nul  
echo %ikto% %Loedatei% am %Date% %Time:~,8% gelöscht >>"%Log%"  
Grüße
bastla

P.S.: Spät aber doch noch der Hinweis auf die Möglichkeit der ""-Formatierung ...
tommhii
tommhii 24.04.2009 um 10:10:41 Uhr
Goto Top
danke klappt super
Grüße Tom
tommhii
tommhii 12.05.2009 um 15:08:39 Uhr
Goto Top
Hallo habe noch ein Problem ich möchte zip Dateien die vom vormonat sind löschen das Datum ist aber nicht im Dateinamen ersichtlich
hab da was gebastelt aber er löscht mir immer alle dateien und nicht nur die vom Vormonat
set "jahr=%date:~-4%"
set /a vormonat=1%date:~-7,2%-1
set "vormonat=%vormonat:~-2%"
@echo OFF & setlocal
if %vormonat%==00 (
set "vormonat=12"
set /a jahr-=1
)

set "Datei=c:\Programme\alt\Test"


echo %vormonat%
echo %jahr%


for %%i in ("%Datei%\BZG\*.zip") do echo %%~ti|findstr "\.%vormonat%\.%jahr%">nul && del "%%i" /s

Danke erstmal

hab es hin bekommen war ein Schreibfehler
tommhii
tommhii 08.11.2011 um 20:42:58 Uhr
Goto Top
hallo ich hab nun wieder einmal ein Problem und zwar hat sich nun meine Anzahl der zip Archive wesentlich erhöht sprich so 15000 zip Archive (insgesamt ca 400 MB) im Monat die ich sichern will und da dauert natürlich die Variante die ich bis jetzt nutze über 5 Stunden ich habe jetzt in den Dateinamen das Datum mit ein gefügt z.B. FTP_XXXXX20111024XXX.zip (X -> variable Zeichen )ich möchte aus dem Ordner aktuell nur die zip Archive vom Vormonat in den Ordner Archiv kopieren aber mit unten der Script Anweisung for... dauert es elend lange kann man das etwas ander gestalten.

.for %%i in ("C:\DATEI\*.zip") do echo %%~ti|findstr "\.%vormonat%\.%jahr%">nul && xcopy "%%i" "C:\tool\" >nul

Danke für die Hilfe im voraus

grüße Tommhii
bastla
bastla 08.11.2011 um 21:42:46 Uhr
Goto Top
Hallo tommhii!

Vielleicht so:
xcopy "C:\DATEI\*%jahr%%vormonat%*.zip" "C:\tool\"
Grüße
bastla
tommhii
tommhii 09.11.2011 um 13:53:57 Uhr
Goto Top
Hallo bastla,

danke für die schnelle Antwort hat geklappt.

Grüße
Tommhii