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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 112188
Url: https://administrator.de/contentid/112188
Ausgedruckt am: 08.11.2024 um 11:11 Uhr
25 Kommentare
Neuester Kommentar
Hallo tommhii und willkommen im Forum!
Etwa so:
Grüße
bastla
[Edit] Anführungszeichen in Zeile 2 ergänzt [/Edit]
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
bastla
[Edit] Anführungszeichen in Zeile 2 ergänzt [/Edit]
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
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 ;)
Hallo tommhii!
Grüße
bastla
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
Hallo tommhii!
Das sollte etwa so gehen:
Grüße
bastla
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
bastla
Hallo tommhii!
Soferne Dich der Variablenname %Vormonat% in diesem Zusammenhang nicht stört, wäre nur eine geringe Änderung des obigen Ansatzes erforderlich:
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
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%"
Grüße
bastla
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:
Auch hier wieder zur Sicherheit ein "echo" vor dem Löschbefehl ...
Grüße
bastla
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
Grüße
bastla
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 "
Grüße
bastla
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
Hallo tommhii!
Grüße
bastla
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
bastla
Hallo tommhii!
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
genügen - hier wäre dann eine möglichst genaue Dateimaske (
Grüße
bastla
... 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%"
"pip.20090408*"
) besonders anzuraten.Grüße
bastla
Hallo tommhii!
Sollte so einfacher gehen:
Grüße
bastla
P.S.: Spät aber doch noch der Hinweis auf die Möglichkeit der ""-Formatierung ...
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%"
bastla
P.S.: Spät aber doch noch der Hinweis auf die Möglichkeit der ""-Formatierung ...