Per Batchdatei Datentypen sichern und zurücksichern
Hallo zusammen.
Ich soll bestimmte Dateitypen mit ihrer Lokation sichern (z.b. nsf) .
Später sollen diese gesicherten Dateien an die alten Orte (Lokationen) zurücksichern werden.
Z.b. ist das bei einem Rechneraustausch der Fall.
Das Problem bei mir ist die Rücksicherung und habe schon diverse FOR SChleifen ausprobiert, komme da aber auf keinen grünen Zweig.
(Findstr in Verbindung mit Copy oder SET was auch immer)
Es wird eine Logdatei namens mycopy.txt mit absoluter Pfadangabe und vollen Namen erstellt.
So das ist mein Quellcode.
Ich soll bestimmte Dateitypen mit ihrer Lokation sichern (z.b. nsf) .
Später sollen diese gesicherten Dateien an die alten Orte (Lokationen) zurücksichern werden.
Z.b. ist das bei einem Rechneraustausch der Fall.
Das Problem bei mir ist die Rücksicherung und habe schon diverse FOR SChleifen ausprobiert, komme da aber auf keinen grünen Zweig.
(Findstr in Verbindung mit Copy oder SET was auch immer)
Es wird eine Logdatei namens mycopy.txt mit absoluter Pfadangabe und vollen Namen erstellt.
So das ist mein Quellcode.
@echo off
Echo Sichern der Lotus Notes-Einstellungen (benutzerspezifisch)
Echo Diese Einstellungen werden unter y:\Backup_Lotus gesichert
set original=%programfiles%\Lotus\Notes\Data
set backup=y:\Backup_Lotus
set pipe=%backup%\wiederherstellung.cmd
rd %backup% /s /q
mkdir %backup%
Rem Suche nach der Dateiendung, Erstellung der Logdatei
for /f %%e in ('dir /s /b C:\*.nsf') do copy /y "%%e" %backup% && echo %%e >> %backup%\mycopy.txt
pause
REM Hier soll zum Testen die Forschleife rein, damit probiert wird ob die Rücksicherung erfolgt.
dir %backup%\*.nsf /b >> %backup%\new_copy.txt
REM Hier einige meiner Mistakes.
rem for /f "delims"=" %%i in (%backup%\mycopy.txt) do set "x=%%i"
rem echo %x%
rem for /f %i IN (%%backup%%\new_copy.txt) echo ('findstr /c:"AgentRunner.nsf" %%backup%%\mycopy.txt')
rem copy /y AgentRunner.nsf ('findstr /b:"AgentRunner.nsf" "mycopy.txt"')
rem for /F "delims=*" %%f in (%backup%\new_copy.txt) do copy /y %%f *.*
pause
REM Hier stehen weitere Anweisungen die Funktionieren
REM Hier wird eine CMD Datei erstellt, die in den Ordner für die Rücksicherung reingelegt wird
echo @ echo off >> %backup%\wiederherstellung.cmd
echo echo Lotus Notes-Einstellungen (benutzerspezifisch) >> %pipe%
echo xcopy /e /y %backup%\Data\*.* %original%\*.* >> %pipe%
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 147001
Url: https://administrator.de/forum/per-batchdatei-datentypen-sichern-und-zuruecksichern-147001.html
Ausgedruckt am: 07.04.2025 um 01:04 Uhr
15 Kommentare
Neuester Kommentar
Ich versteh das Problem jetzt nicht so ganz. Vielleicht hast Du ein kleines Beispiel dazu.
Was ich hier im Forum gelernt habe:
Das hier
funktioniert nur, wenn Du SetLocal ENABLEDELAYEDEXPANSION einschaltest. Lies mal setlocal /? nach ....
Ansonsten probiere es mal so, ob die Schleife in Ordnung ist
Markus
Was ich hier im Forum gelernt habe:
Das hier
for /f "delims"=" %%i in (%backup%\mycopy.txt) do set "x=%%i"
echo %x%
Ansonsten probiere es mal so, ob die Schleife in Ordnung ist
for /f "delims"=" %%i in (%backup%\mycopy.txt) do echo %%i
Markus
Moin NickNack,
ich würde in diesem Fall eine einfachere Strategie wählen.
a) Sichern & protokollieren aller *.nsf-Dateien
b) Rücksichern geht doch genauso ohne in ein Protokoll reinzuschauen
Grüße
Biber
[Edit] Ohne %computername% isses irgendwie noch schlauer beim Rechnertausch... siehe unten [/Edit]
ich würde in diesem Fall eine einfachere Strategie wählen.
a) Sichern & protokollieren aller *.nsf-Dateien
xcopy C:\*.nsf Y:\Backup\Lotus\%computername%_%username%\ /s >"Y:\Backup\Lotus\%computername%_%username%\%date%.log"
b) Rücksichern geht doch genauso ohne in ein Protokoll reinzuschauen
xcopy Y:\Backup\Lotus\%computername%_%username%\*.nsf C:\*.nsf /s
Grüße
Biber
[Edit] Ohne %computername% isses irgendwie noch schlauer beim Rechnertausch... siehe unten [/Edit]

*hust*
*räusper*
Lord Biber braucht ne Brille...
also bis auf %computername% - würd ich das haargenauso machen
[OT]Apropos Haare - der Biber ist nicht nur bei den Temperaturen entschuldigt. - der pipifaxEinwand ist mir ja schon fast peinlich*flitz*[/OT]
edit - fast vergessen...
ganz am Anfang würde ich noch ein
*räusper*
Lord Biber braucht ne Brille...
Z.b. ist das bei einem Rechneraustausch der Fall.
also bis auf %computername% - würd ich das haargenauso machen
[OT]Apropos Haare - der Biber ist nicht nur bei den Temperaturen entschuldigt. - der pipifaxEinwand ist mir ja schon fast peinlich*flitz*[/OT]
edit - fast vergessen...
ganz am Anfang würde ich noch ein
Tasklist |find "otus" && echo Lotus Notes ist geöffnet bitte schliessen
oderTasklist |find "otus" && Taskkil /F /IM "wieSichDieExeAuchImmerNennt.exe" echo Lotus Notes war geöffnet.
*lach* @t-mo,
okay, da hast du vollkommen Recht..
Also - dann bitte oben jegliches Vorkommnis von %computername% streichen.
Dann ist es mehr als ausreichend, wenn alles %username%-bezogen gesichert und zurückgespielt wird.
[OT]
Und es hat heute nichts mit den Temperaturen zu tun... die sind erträglich.
Nein, hier im Büro lief den ganzen gatesverdammten Tach ein Billich-Radio (Marke Werbegeschenk), mit dem nur zwei ver###ne Sender halbwegs klar zu empfangen sind.
Und natürlich die beiden, die von früh bis spät immer nur alles von einer einzigen selbstgebrannten CD runterspielen (Lady Gaga, Shakira, Unheilig, Lena, 20% auf alles außer Tiernahrung und von vorn)
Okay, jetzt ist der Kollege Radiobesitzer gegangen und seine Mach-Mich-Meschugge-Maschine im Eisfach unseres Kühlschranks.
Das findet es nie wieder... hoffe ich.
[/OT]
Grüße
Biber
okay, da hast du vollkommen Recht..
Also - dann bitte oben jegliches Vorkommnis von %computername% streichen.
Dann ist es mehr als ausreichend, wenn alles %username%-bezogen gesichert und zurückgespielt wird.
[OT]
Und es hat heute nichts mit den Temperaturen zu tun... die sind erträglich.
Nein, hier im Büro lief den ganzen gatesverdammten Tach ein Billich-Radio (Marke Werbegeschenk), mit dem nur zwei ver###ne Sender halbwegs klar zu empfangen sind.
Und natürlich die beiden, die von früh bis spät immer nur alles von einer einzigen selbstgebrannten CD runterspielen (Lady Gaga, Shakira, Unheilig, Lena, 20% auf alles außer Tiernahrung und von vorn)
Okay, jetzt ist der Kollege Radiobesitzer gegangen und seine Mach-Mich-Meschugge-Maschine im Eisfach unseres Kühlschranks.
Das findet es nie wieder... hoffe ich.
[/OT]
Grüße
Biber
Hallo NickNack und willkommen im Forum!
Grüße
bastla
Gibt es noch die Möglichkeit Ein Verzeichnis wie %windir% zu exkluden?
Ungetestet etwa so:@echo off & setlocal
set ex=%temp%\ex.txt
>%ex% echo %windir%
xcopy C:\*.nsf Y:\Backup\Lotus\%computername%_%username%\ /s /exclude:%ex% >"Y:\Backup\Lotus\%computername%_%username%\%date%.log"
bastla
Moin NickNick,
in der Zeile 04 sollte auch die in Zeile01 relativ ressourcenintensiv erzeugte Monsterliste "alle 37000 Dateien aus dem %windir%-Verzeichnis verwendet werden, sonst lohnt sich der Aufwand des Erzeugens nicht.
Und vielleicht auch wieder gelöscht werden. *g
Aber von der Strategie ist es dennoch absolut ... na, es hat Potentiale.
So schreibst du, um die ein bis vielleicht drei *.nsf-Dateien, die auf dem ganzen Laufwerk C: gefunden werden, eine Gegencheckliste mit den erwähnten 37000 *.* Dateien in %windir%
Ein "DIR /s /b &windir%\*.nsf" >>%ex% sollte auch reichen.
Ansonsten
Grüße
Biber
in der Zeile 04 sollte auch die in Zeile01 relativ ressourcenintensiv erzeugte Monsterliste "alle 37000 Dateien aus dem %windir%-Verzeichnis verwendet werden, sonst lohnt sich der Aufwand des Erzeugens nicht.
Und vielleicht auch wieder gelöscht werden. *g
Aber von der Strategie ist es dennoch absolut ... na, es hat Potentiale.
So schreibst du, um die ein bis vielleicht drei *.nsf-Dateien, die auf dem ganzen Laufwerk C: gefunden werden, eine Gegencheckliste mit den erwähnten 37000 *.* Dateien in %windir%
Ein "DIR /s /b &windir%\*.nsf" >>%ex% sollte auch reichen.
Ansonsten
- wenn deine Benutzer die Rechte dazu haben, ihre Lotus-Dateien irgendwo auf dem Laufwerk C:\ abzuspeichern und vielleicht dann sogar noch Verzeichnisse unter C:\[=root] anlegen dürfen:---> befrag eine Suchmaschine nach dem Begriff "hausgemachtes Leiden"
- ich hätte erwartet, dass nur alle *.nsf-Dateien unter dem jeweiligen %userprofile% des Anwenders eingesammelt werden.
- und drittens - nun bekomm mal keine feuchten Augen wegen der Performance. Du musst doch nicht danebenstehen und auf den Bildschirm starren, wären da die Platten abgegrast werden. Geh solange einen Cappu trinken oder arbeite.
Grüße
Biber
Hallo NickNack!
Magst Du nicht doch Deine Zeilen 1-3 (oben) gegen meine Zeilen 1-3 (knapp darüber) tauschen? Dann hat die "Monsterliste" auch nur eine Zeile ...
Dein Vorschlag mit For-Schleifen könnte (ungetestet) etwa so abgewandelt werden:
Grüße
bastla
Magst Du nicht doch Deine Zeilen 1-3 (oben) gegen meine Zeilen 1-3 (knapp darüber) tauschen? Dann hat die "Monsterliste" auch nur eine Zeile ...
Dein Vorschlag mit For-Schleifen könnte (ungetestet) etwa so abgewandelt werden:
@echo on & setlocal
Echo Sichern der Lotus Notes-Einstellungen (benutzerspezifisch)
Echo Diese Einstellungen werden unter y:\Backup_Lotus gesichert
set "original=%programfiles%\Lotus\Notes\Data"
set "backup=y:\Backup_Lotus"
set "pipe=%backup%\wiederherstellung.cmd"
set "SuchLaufwerke=C D"
set "Suchmuster=reg"
set "Log=%backup%\Log.txt"
rd "%backup%" /s /q
md "%backup%"
pause
REM Prüfung ob auf dem Laufwerk c oder d wie oben angegeben nach einem Muster
if "%Suchmuster%"=="" goto :eof
for %%d in (%SuchLaufwerke%) do (
for /f "delims=" %%i in ('dir /s /b /a-d %%d:\*.%Suchmuster%') do if %%~zi gtr 0 xcopy "%%i" "%backup%%%~pnxi*"|findstr /v /c:"1 Datei(en) kopiert">>"%Log%"
)
pause
bastla
Moin NickNack,
jetzt machst du mich auch neugierig...
Ich kann es nicht reproduzieren - auch wenn ich bastlas ja wirklich viel schlankere Methode verwende.
-> wenn ich in meiner excl.lst stehen habe
---> dann werden alle relevanten Dateien ausgeschlossen.
Der einzige Fall, in dem ich ein Fehlverhalten provozieren kann ist, wenn ich
Quelle z.B. C:Windows\system32\Sicherung.bat ("C:Windows" OHNE "\" dazwischen)
und in der Excludedatei wird vergleichen mit "C:\Windows" MIT Backslash dazwischen.
In diesem Fall wird nichts exkludiert, da der Vergleich keine Übereinstimmung findet.
Aber so ein Konstrukt ist aus deinen geposteteten Zwischenschnipseln nicht ersichtlich.
Bitte poste auch nochmal die Ausgaben von
Grüße
Biber
jetzt machst du mich auch neugierig...
Das mit Deinen Set und excludieren habe ich so 1 zu eins übernommen, kam immer Pfadfehler etc. =/
Kannst du das mal genauer beschreiben (Originalfehlermeldung) bitte?Ich kann es nicht reproduzieren - auch wenn ich bastlas ja wirklich viel schlankere Methode verwende.
-> wenn ich in meiner excl.lst stehen habe
C.\Windows
.. in klein oder gross, von Hand getippt oder aus der aufgelösten %windir% Variablen, mit oder abschließenden Backslash...---> dann werden alle relevanten Dateien ausgeschlossen.
Der einzige Fall, in dem ich ein Fehlverhalten provozieren kann ist, wenn ich
- auf Root des Quellverzeichnisses stehen (also meinetwegen auf "c:\" einen XCopy-Befehl absetze mit /s und /Exclude und in der Quellverzeichnis-Angabe nur eine Dateimaske stehen habe.
XCOPY *.nsf d:\temp\ /s /exclude:excl.lst
--> wenn dann kopiert wird mit allen Unterverzeichnissen, dann istQuelle z.B. C:Windows\system32\Sicherung.bat ("C:Windows" OHNE "\" dazwischen)
und in der Excludedatei wird vergleichen mit "C:\Windows" MIT Backslash dazwischen.
In diesem Fall wird nichts exkludiert, da der Vergleich keine Übereinstimmung findet.
Aber so ein Konstrukt ist aus deinen geposteteten Zwischenschnipseln nicht ersichtlich.
Bitte poste auch nochmal die Ausgaben von
Set temp
set windir
set windir
Grüße
Biber
Hallo NickNack!
mal etwas ...
liefert ganz ohne Temp-Datei alle zum Suchmuster passenden Dateien (wg "
überprüft die Dateigröße ("
erstellt unterhalb von "%backup%" den "Original-Pfad" ("
sollte es eigentlich auch tun. Je nach Variante ist das letzte Zeichen des Zieles von Bedeutung: bei vollständiger Angabe (also Pfad + Name + Extension) sorgt der abschließende "*" dafür, dass "
Da im Log nur die Dateipfade landen sollen, wird schließlich mit
die "Vollzugsmeldung" herausgefiltert ...
Zum "
und eigenen Tests (allerdings nur unter XP SP3) sollte ein Inhalt "C:\Windows"der Datei "%temp%\ex.txt" genügen, um jegliche in oder unterhalb von "C:\Windows" liegende Datei vom Kopieren auszuschließen - so würden bei mir bei einer "
zwar "
), aber keine davon aus einem mit "C:\Windows" beginnenden Pfad ...
Grüße
bastla
Geht das auch BITTE nochmal etwas ausführlicher was die ganzen Abkürzungen bedeuten?
Findest Du zwar in der Hilfe ("for /?
" ziemlich gegen Ende), aber ich zerpflückefor /f "delims=" %%i in ('dir /s /b /a-d %%d:\*.%Suchmuster%') do if %%~zi gtr 0 xcopy "%%i" "%backup%%%~pnxi*"|findstr /v /c:"1 Datei(en) kopiert">>"%Log%"
for /f "delims=" %%i in ('dir /s /b /a-d %%d:\*.%Suchmuster%') do
/a-d
") als "%%i" mit vollem Pfad und ohne dass Leerzeichen (als Default-Trennzeichen) diesen Pfad "auseinanderbrechen" würden (dazu "delims=
").if %%~zi gtr 0
%%~zi
") der jeweiligen Datei.xcopy "%%i" "%backup%%%~pnxi*"
%%~pi
") und lässt den Dateinamen ("%%~nxi
") dabei unverändert - einxcopy "%%i" "%backup%%%~p"
xcopy
" das Ziel als Datei erkennt und daher nicht danach fragen muss (einen Schalter analog zu etwa "/i
" gibt es hier nicht). Wird als Ziel nur der Pfad angegeben, enthält dieser ("%%~pi
") automatisch einen "\" am Ende, wodurch feststeht, dass das Ziel ein Ordner ist.Da im Log nur die Dateipfade landen sollen, wird schließlich mit
|findstr /v /c:"1 Datei(en) kopiert">>"%Log%"
Zum "
Exclude
": Lt Hilfetext Kopiervorgang ausgeschlossen. Beispiel: Bei der
Zeichenfolge \obj\ oder .obj werden alle Dateien
unterhalb des Verzeichnisses OBJ bzw. alle Dateien mit
der Erweiterung .obj vom Kopiervorgang ausgeschlossen.
/l
"-Simulation (Direkteingabe in der CMD-Shell) mitD:\>set ex=%temp%\ex.txt
D:\>>%ex% echo %windir%
D:\>xcopy c:\*.dll d:\ /s /exclude:%ex% /l
3542 Datei(en) kopiert
" (und ja, bei einer "Höhe" der "Fensterpuffergröße" von "9999" kann ich mir mit ein wenig Scrollen alle im Konsolenfenster ansehen Grüße
bastla