Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Sicherung mit xcopy

Frage Entwicklung Batch & Shell

Mitglied: tommhii

tommhii (Level 1) - Jetzt verbinden

23.03.2009, aktualisiert 18.10.2012, 5167 Aufrufe, 25 Kommentare

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
Mitglied: bastla
23.03.2009 um 22:55 Uhr
Hallo tommhii und willkommen im Forum!

Etwa so:
01.
echo off & setlocal 
02.
set "jahr=%date:~-4%" 
03.
set /a vormonat=1%date:~-7,2%-1 
04.
set "vormonat=%vormonat:~-2%" 
05.
if %vormonat%==00 ( 
06.
    set "vormonat=12" 
07.
    set /a jahr-=1 
08.
09.
set "jahr=%jahr:~-2%" 
10.
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]
Bitte warten ..
Mitglied: Globetrotter
23.03.2009 um 22:59 Uhr
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 ;)
Bitte warten ..
Mitglied: tommhii
24.03.2009 um 07:45 Uhr
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
Bitte warten ..
Mitglied: bastla
24.03.2009 um 08:54 Uhr
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
Bitte warten ..
Mitglied: tommhii
24.03.2009 um 15:33 Uhr
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
Bitte warten ..
Mitglied: bastla
24.03.2009 um 20:58 Uhr
Hallo tommhii!

Das sollte etwa so gehen:
01.
echo off & setlocal 
02.
set "jahr=%date:~-4%" 
03.
set /a vormonat=1%date:~-7,2%-1 
04.
set "vormonat=%vormonat:~-2%" 
05.
if %vormonat%==00 ( 
06.
    set "vormonat=12" 
07.
    set /a jahr-=1 
08.
09.
for %%i in ("C:\DATEI\*.zip") do echo %%~ti|findstr "\.%vormonat%\.%jahr%">nul && xcopy "%%i" "C:\tool\" >nul
Grüße
bastla
Bitte warten ..
Mitglied: tommhii
25.03.2009 um 10:08 Uhr
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
Bitte warten ..
Mitglied: bastla
25.03.2009, aktualisiert 18.10.2012
Hallo tommhii!

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

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
16.04.2009 um 14:49 Uhr
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
Bitte warten ..
Mitglied: bastla
16.04.2009 um 17:13 Uhr
Hallo tommhii!

Soferne Dich der Variablenname %Vormonat% in diesem Zusammenhang nicht stört, wäre nur eine geringe Änderung des obigen Ansatzes erforderlich:
01.
echo off & setlocal 
02.
set "jahr=%date:~-4%" 
03.
set /a vormonat=1%date:~-7,2%-6 
04.
if %vormonat% leq 100 ( 
05.
    set /a vormonat+=12 
06.
    set /a jahr-=1 
07.
08.
set "vormonat=%vormonat:~-2%" 
09.
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
Bitte warten ..
Mitglied: tommhii
17.04.2009 um 11:46 Uhr
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
Bitte warten ..
Mitglied: bastla
17.04.2009 um 12:15 Uhr
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:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Test" 
03.
set "Maske=pip.????????010015118" 
04.
set "Alter=15" 
05.
 
06.
set S=%temp%\Stichtag.vbs 
07.
>%S% echo wscript.echo dateAdd("d",-%Alter%, Date()) 
08.
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %S%') do set "Stichtag=%%c%%b%%a" 
09.
 
10.
for %%i in ("%Ordner%\%Maske%") do call :ProcessFile "%%i" 
11.
goto :eof 
12.
 
13.
:ProcessFile 
14.
set "Dateidatum=%~x1" 
15.
set "Dateidatum=%Dateidatum:~,8%" 
16.
if %Dateidatum% leq %Stichtag% echo del %1 
17.
goto :eof
Auch hier wieder zur Sicherheit ein "echo" vor dem Löschbefehl ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
17.04.2009 um 13:02 Uhr
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
Bitte warten ..
Mitglied: bastla
17.04.2009 um 13:35 Uhr
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
Bitte warten ..
Mitglied: tommhii
21.04.2009 um 14:29 Uhr
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
Bitte warten ..
Mitglied: bastla
21.04.2009 um 18:15 Uhr
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
Bitte warten ..
Mitglied: tommhii
23.04.2009 um 08:47 Uhr
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
Bitte warten ..
Mitglied: bastla
23.04.2009 um 10:51 Uhr
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
Bitte warten ..
Mitglied: tommhii
23.04.2009 um 14:04 Uhr
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
Bitte warten ..
Mitglied: bastla
23.04.2009 um 14:15 Uhr
Hallo tommhii!

Sollte so einfacher gehen:
01.
set "Loedatei=d:\Test\pip.20090408*" 
02.
set "Log=d:\test\Geloescht%Date%.txt" 
03.
set ikto=0 
04.
for /f %%i in ('dir /w "%Loedatei%" 2^>nul^|findstr "Datei(en)"') do set "ikto=%%i" 
05.
del "%Loedatei%" 2>nul 
06.
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 "Code"-Formatierung ...
Bitte warten ..
Mitglied: tommhii
24.04.2009 um 10:10 Uhr
danke klappt super
Grüße Tom
Bitte warten ..
Mitglied: tommhii
12.05.2009 um 15:08 Uhr
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
Bitte warten ..
Mitglied: tommhii
08.11.2011 um 20:42 Uhr
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
Bitte warten ..
Mitglied: bastla
08.11.2011 um 21:42 Uhr
Hallo tommhii!

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

danke für die schnelle Antwort hat geklappt.

Grüße
Tommhii
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
Server 2012R2 HyperV Sicherung von Dateien (10)

Frage von smeclnt zum Thema Windows Server ...

Windows Server
SBS 2011 - Fehler bei Server-Sicherung (20)

Frage von Irolan zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...