Verschieben von Ordnern, die das Archivbit gesetzt haben
Moin!
Gibt es eine Software, die in der Lage ist, anhand des Archivbits von Ordnern diese zu verschieben?
Ich möchte, dass Benutzer das Archivbit setzen und nachts eine Software auf dem Fileserver läuft, die diese Ordner findet und ins Archiv verschiebt, möglichst automatisch in der Art, dass \\server\homes\benutzerX\VerzeichnisY zu \\server\archiv\benutzerX\VerzeichnisY wird.
Auch für alternative Ideen wäre ich sehr dankbar.
Gibt es eine Software, die in der Lage ist, anhand des Archivbits von Ordnern diese zu verschieben?
Ich möchte, dass Benutzer das Archivbit setzen und nachts eine Software auf dem Fileserver läuft, die diese Ordner findet und ins Archiv verschiebt, möglichst automatisch in der Art, dass \\server\homes\benutzerX\VerzeichnisY zu \\server\archiv\benutzerX\VerzeichnisY wird.
Auch für alternative Ideen wäre ich sehr dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113150
Url: https://administrator.de/forum/verschieben-von-ordnern-die-das-archivbit-gesetzt-haben-113150.html
Ausgedruckt am: 23.12.2024 um 15:12 Uhr
27 Kommentare
Neuester Kommentar
Hallo,
evtl. lässt sich das mit xcopy lösen.( xcopy /? )
eine kleine Batchdatei schreiben in der erst mit xcopy die Daten mit Archivbit kopiert werden und dann wenn nötig die Daten löschen.
Schalter /A Kopiert nur Dateien mit gesetztem Archivattribut und ändert das Attribut nicht.
Aber:
Willst du nachts den kompletten Fileserver nach Ordnern mit Archivbit durchsuchen lassen? Wieviel ist das?
Andere Möglichkeit:
erstelle eine Batchdatei mit folgendem Inhalt:
echo %1 >> liste.txt
wenn der Benutzer den zu archivierenden Ordner auf diese Batchdatei zieht, wird der Pfad des Ordners in die Datei "liste.txt" eingetragen.
Dann lässt du (ebenfalls mit einer Batchdatei) die Pfade in der Liste abarbeiten und verschieben.
Wenn der Vorgang abgeschlossen ist, löschst du die Datei liste.bat sie wird wieder erstellt, sobald man wieder was auf die Batchdatei zieht.
gruß
Peter
evtl. lässt sich das mit xcopy lösen.( xcopy /? )
eine kleine Batchdatei schreiben in der erst mit xcopy die Daten mit Archivbit kopiert werden und dann wenn nötig die Daten löschen.
Schalter /A Kopiert nur Dateien mit gesetztem Archivattribut und ändert das Attribut nicht.
Aber:
Willst du nachts den kompletten Fileserver nach Ordnern mit Archivbit durchsuchen lassen? Wieviel ist das?
Andere Möglichkeit:
erstelle eine Batchdatei mit folgendem Inhalt:
echo %1 >> liste.txt
wenn der Benutzer den zu archivierenden Ordner auf diese Batchdatei zieht, wird der Pfad des Ordners in die Datei "liste.txt" eingetragen.
Dann lässt du (ebenfalls mit einer Batchdatei) die Pfade in der Liste abarbeiten und verschieben.
Wenn der Vorgang abgeschlossen ist, löschst du die Datei liste.bat sie wird wieder erstellt, sobald man wieder was auf die Batchdatei zieht.
gruß
Peter
Hallo DerWoWusste und pxxsxx!
Ich würde auch eine Batch-Lösung verwenden, und da ja das Ziel eigentlich das Verschieben ganzer Ordner ist, etwa so vorgehen:
Damit beim Testen nicht allzuviel schiefgeht, steht vor dem Löschbefehl (der nur nach einem erfolgreichen Kopieren ausgeführt werden sollte) in der Zeile 13 noch ein "echo", sodass zwar kopiert wird, für das Löschen aber nur eine Simulation durch Ausgabe des Löschbefehles erfolgt.
Grüße
bastla
Ich würde auch eine Batch-Lösung verwenden, und da ja das Ziel eigentlich das Verschieben ganzer Ordner ist, etwa so vorgehen:
@echo off & setlocal
set "Quelle=\\server\homes"
set "Ziel=\\server\archiv"
for /f "delims=" %%i in ('dir /s /b /aad "%Quelle%" 2^>nul') do (
if exist "%%i" call :ProcessDir "%%i"
)
goto :eof
:ProcessDir
set "ZielPfad=%~1"
call set "ZielPfad=%%ZielPfad:%Quelle%=%Ziel%%%"
xcopy /e /y %1 "%ZielPfad%\" >nul && echo rd /s /q %1
goto :eof
Grüße
bastla
Auch ne Möglichkeit
Aber ich könnte mir vorstellen, dass die Benutzer Probleme damit haben, das Archivbit zu setzen. Ich hab hier auch ein paar so Kollegen, wenn ich denen sag:
"wenn du was archivieren willst, klick mit der rechten Maustaste auf den Ordner, dann auf Eigenschaften, dann auf den Button "Erweitert". Und jetzt setzt du den Haken bei "Ordner kann archiviert werden". Dann klickst du auf OK. Im nächsten Fenster klickst du auch auf OK. Dann wird nochmal nachgefragt, Ob du nur den einen Ordner oder auch das darunter markieren willst. Da kannst du "nur für diesen Ordner übernehmen" auswählen und dann nochmal auf OK."
kommt definitiv nix vernüftiges bei raus.
Wenn ich denen aber sag: "Wenn du was archivieren willst, zieh den Ordner mit der Maus auf dieses Symbol"
kommen sie wesentlich leichter zurecht.
Allerdings lässt sich das auch kombinieren indem man beim ziehen auf eine Batchdatei das Archivbit für den gezogenen Ordner setzt.
@echo off
attrib +A %1
Windows kann so einfach zu bedienen sein - wenn man die DOS-Box benutzt
Gruß
Peter
Aber ich könnte mir vorstellen, dass die Benutzer Probleme damit haben, das Archivbit zu setzen. Ich hab hier auch ein paar so Kollegen, wenn ich denen sag:
"wenn du was archivieren willst, klick mit der rechten Maustaste auf den Ordner, dann auf Eigenschaften, dann auf den Button "Erweitert". Und jetzt setzt du den Haken bei "Ordner kann archiviert werden". Dann klickst du auf OK. Im nächsten Fenster klickst du auch auf OK. Dann wird nochmal nachgefragt, Ob du nur den einen Ordner oder auch das darunter markieren willst. Da kannst du "nur für diesen Ordner übernehmen" auswählen und dann nochmal auf OK."
kommt definitiv nix vernüftiges bei raus.
Wenn ich denen aber sag: "Wenn du was archivieren willst, zieh den Ordner mit der Maus auf dieses Symbol"
kommen sie wesentlich leichter zurecht.
Allerdings lässt sich das auch kombinieren indem man beim ziehen auf eine Batchdatei das Archivbit für den gezogenen Ordner setzt.
@echo off
attrib +A %1
Windows kann so einfach zu bedienen sein - wenn man die DOS-Box benutzt
Gruß
Peter
Das verschieben soll ja in der Nacht passieren. Ich denk mal, damit die Benutzer nichts davon mitbekommen oder nicht das komische schwarze Fenster wegklicken. Ausserdem geht das kopieren schneller, wenns lokal auf dem Server gestartet wird, als wenn man am Client übers Netz kopiert. (es liegen ja Quelle und Ziel auf dem Server) Und das Netzwerk wird nicht so belastet.
Man könnte auch z.B. über Tasks oder ein Logoff-Script bestimmte Ordner automatisch für die Archivierung markieren. Alle Markierten Ordner würden dann einmal gesammelt nachts lokal am Server von einem Ordner in den anderen kopiert.
Am Client wenn ich das Kopieren starte, holt er die Dateien vom Server und schiebt sie wieder auf den Server. Macht keinen Sinn Es sei denn, die Batch wird am Server hinterlegt und von einer Batch, die am Client liegt via Telnet gestartet.
Wie gesagt, eine Kombination wäre gut:
Tagsüber die Ordner markieren und nachts verschieben.
Gruß
Peter
Man könnte auch z.B. über Tasks oder ein Logoff-Script bestimmte Ordner automatisch für die Archivierung markieren. Alle Markierten Ordner würden dann einmal gesammelt nachts lokal am Server von einem Ordner in den anderen kopiert.
Am Client wenn ich das Kopieren starte, holt er die Dateien vom Server und schiebt sie wieder auf den Server. Macht keinen Sinn Es sei denn, die Batch wird am Server hinterlegt und von einer Batch, die am Client liegt via Telnet gestartet.
Wie gesagt, eine Kombination wäre gut:
Tagsüber die Ordner markieren und nachts verschieben.
Gruß
Peter
ausserdem geht das kopieren schneller, wenns lokal auf dem Server gestartet wird, als wenn man am Client übers Netz kopiert. (es liegen ja Quelle und Ziel auf dem Server)
... womit Du natürlich Recht hast (allerdings ist es dann auch nicht wirklich sinnvoll, Quelle und Ziel per UNC-Pfad anzugeben).Grüße
bastla
Das lässt sich ja in deiner Batch-Datei regeln indem man anstatt
set "Quelle=\\server\homes"
set "Ziel=\\server\archiv"
z.B.
set "Quelle=d:\Daten\Homes"
set "Ziel=d:\Archiv\Homes"
angibt.
Evtl. währe es mal interssant, eine vernünftige Backupsoftware als Batch zu basteln. Mit Wbat könnte man auch noch ein schönes GUI dazu bauen.
Gruß
Peter
set "Quelle=\\server\homes"
set "Ziel=\\server\archiv"
z.B.
set "Quelle=d:\Daten\Homes"
set "Ziel=d:\Archiv\Homes"
angibt.
Evtl. währe es mal interssant, eine vernünftige Backupsoftware als Batch zu basteln. Mit Wbat könnte man auch noch ein schönes GUI dazu bauen.
Gruß
Peter
Hallo DerWoWusste!
Wenn's nur darum geht, das Archivbit für einen Ordner zu setzen, könntest Du tatsächlich den entsprechenden Batch einfach in "SendTo" platzieren ...
... als Kontextmenüeintrag sollte sich das aber mit der folgenden .reg-Datei auch machen lassen:
Die [Edit] jetzt auch erkennbare [/Edit] Leerzeile am Ende soll übrigens auch mit in die Datei.
Als Alternative ein Batch (hier für das Gegenteil):
Grüße
bastla
Wenn's nur darum geht, das Archivbit für einen Ordner zu setzen, könntest Du tatsächlich den entsprechenden Batch einfach in "SendTo" platzieren ...
... als Kontextmenüeintrag sollte sich das aber mit der folgenden .reg-Datei auch machen lassen:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\Archivieren]
@="Ordner &archivieren"
[HKEY_CLASSES_ROOT\Directory\shell\Archivieren\Command]
@="attrib +A %1"
Als Alternative ein Batch (hier für das Gegenteil):
reg add HKCR\Directory\shell\NichtArchivieren /ve /d "Ordner &nicht archivieren" /f
reg add HKCR\Directory\shell\NichtArchivieren\Command /ve /d "attrib -A %%1" /f
Grüße
bastla
Hallo DerWoWusste!
Vielleicht schafft Biber es, diesen Einzeiler in die Registry zu bringen:
- mir gelingt's leider auch mit "
Grüße
bastla
Vielleicht schafft Biber es, diesen Einzeiler in die Registry zu bringen:
setlocal enabledelayedexpansion & set "ZielPfad=%~f1" & set "ZielPfad=!ZielPfad:\\server\homes\=\\server\archiv\!" & xcopy /e /y %1 "!ZielPfad!\">nul && rd /s /q %1
cmd /v:on /c
" nicht. Grüße
bastla
Moin bastla,
Ich kann es am CMD-Prompt zumindest soweit hinbiegen, dass ich mit zwei Zeilen...
... einen Kontext-Eintrag "NichtArchivieren" im Explorer erzeuge, der mit einem Verzeichnis unterhalb "D:\temp1" als Parameter folgendes ausführen würde:
-- angezeigtes ECHO-kontroll-CMD-Fenster:
--> Gut ist also (geklappt):
--> nicht klappen will bei mir
--> nicht versucht:
Aber bis hierhin erscheint es mir noch technisch machbar, unter Wartbarkeitsgesichtspunkten allerdings absolut verwerflich.
Grüße
Biber
- mir gelingt's leider auch mit "cmd /v:on /c" nicht.
... ich weiss ja nicht genau, wo da das Problem sein könnte... *ggIch kann es am CMD-Prompt zumindest soweit hinbiegen, dass ich mit zwei Zeilen...
set "regval=cmd /v:on /c ^(set \"Z=%1\" ^& set \"Z=!Z:D:\temp1\=X:\test\archiv\!\" ^& @echo xcopy /e /y %1 \"!Z!\\\"^>con ^&^& @echo rd /s /q %1^&pause ^)"
reg add HKCR\Directory\shell\NichtArchivieren\Command /ve /d "%regval%" /f
-- angezeigtes ECHO-kontroll-CMD-Fenster:
xcopy /e /y D:\temp1\alltexts "X:\test\archiv\alltexts\"
rd /s /q D:\temp1\alltexts
Drücken Sie eine beliebige Taste . . .
--> Gut ist also (geklappt):
- DelayedExpansion wird angewandt -der ZielPfad !Z! wird aufgelöst
- auch die mal-für-CMD/mal-für-REG_ADD-Maskiererei mit vorangestellten Backslashes und Carets klappt
- und funktional klappt ja auch das ändern von D:\Temp1\whatever in X:\test\Archiv
--> nicht klappen will bei mir
- die Verwendung der Ableitung "%~f1" statt "%1" ....3x probiert, 3x gescheitert.
--> nicht versucht:
- ob es mit UNC-Pfaden "\\server\subX" -->"\\server\SubY\bla" auch laufen würde
Aber bis hierhin erscheint es mir noch technisch machbar, unter Wartbarkeitsgesichtspunkten allerdings absolut verwerflich.
Grüße
Biber
@Biber
Mal abgesehen von der konzeptionellen Seite (es müsste dann ja auch zumindest noch eine Überprüfung des Quellpfades stattfinden, da ja der Kontextmenüeintrag für alle Verzeichnisse - und nicht nur für solche in der Freigabe "\\server\homes" - angeboten wird) und der suboptimalen Wartbarkeit: Bei mir (XP Pro) endet's auch mit
schon bei der Meldung (angezeigt per Änderung von "/c" auf "/k"):
- und da ist noch nicht einmal das "%~f1" (das ich leider bei all meinen vorhergehenden Versuchen - nur zur Sicherheit - verwenden zu sollen gemeint hatte) dabei ...
@DerWoWusste
Damit bliebe aus meiner Sicht die sinnvolle Variante ein Batch "Archiv.bat" in "SendTo".
Grüße
bastla
Mal abgesehen von der konzeptionellen Seite (es müsste dann ja auch zumindest noch eine Überprüfung des Quellpfades stattfinden, da ja der Kontextmenüeintrag für alle Verzeichnisse - und nicht nur für solche in der Freigabe "\\server\homes" - angeboten wird) und der suboptimalen Wartbarkeit: Bei mir (XP Pro) endet's auch mit
@echo off & setlocal
reg add HKCR\Directory\shell\NichtArchivieren /ve /d "Ordner &nicht archivieren" /f
set "regval=cmd /v:on /k ^(set \"Z=%1\" ^& set \"Z=!Z:D:\temp1\=X:\test\archiv\!\" ^& @echo xcopy /e /y %1 \"!Z!\\\"^>con ^&^& @echo rd /s /q %1^&pause ^)"
reg add HKCR\Directory\shell\NichtArchivieren\Command /ve /d "%regval%" /f
Der Befehl "(set" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
D:\temp1>
@DerWoWusste
Damit bliebe aus meiner Sicht die sinnvolle Variante ein Batch "Archiv.bat" in "SendTo".
Grüße
bastla
Moin bastla & DerWoWusste,
fast überflüssig zu erwähnen, dass auch ich das Ergebnis oben unter XP Pro erzeugt habe...
--> wenn denn dann nicht mal bei gleichen formalen Grundvoraussetzungen bei zwei Copy&Paste-Zeilen das gleiche reproduzierbare Ergebnis herauskommt...
> dann plädiere ich an dieser Stelle mal ausnahmsweise GEGEN eine Oneliner-Lösung.
@bastla
Aber Deiner Schlussfolgerung, ein Batch namens "Archiv.bat" wäre dann am sinnvollsten unter "SendTo"...??
Warum denn?
Wenn sich ohne eine gehörige Portion Glück oder Unbekümmertheit kein 150-Zeichen-CMD-Oneliner in das @-Feld des neues Directory-Shell-Eintrags trümmern lässt-..
-->okay. Ist dann halt so. Dann davon Finger wech. Agree.
Aber dort an diese Stelle, wo vor drei, vier Kommentaren noch "attrib +A %1" oder ähnlich stand,
wenn dort ein Batch mit "cmd /k D:\batches\ArchivViaKontextMenue.bat" aufgerufen werden würde -- reicht das denn nicht?
Und bezogen auf die aller-ursprünglichste Fragestellung ganz ganz oben im Eröffnungsbeitrag wäre das doch ohnehin nur ein Spezialfall des Jede-Nacht-Über-Alle-Ordner-Laufs.
Somit könnte man/frau doch DIESEN Batch aufbohren um einen Spezialparameter "ViaKontextMenue", damit er seinen Job nur nbezogen auf diesen einen Ordner macht und nicht auf alle.
Grüße
Biber
fast überflüssig zu erwähnen, dass auch ich das Ergebnis oben unter XP Pro erzeugt habe...
--> wenn denn dann nicht mal bei gleichen formalen Grundvoraussetzungen bei zwei Copy&Paste-Zeilen das gleiche reproduzierbare Ergebnis herauskommt...
> dann plädiere ich an dieser Stelle mal ausnahmsweise GEGEN eine Oneliner-Lösung.
@bastla
Aber Deiner Schlussfolgerung, ein Batch namens "Archiv.bat" wäre dann am sinnvollsten unter "SendTo"...??
Warum denn?
Wenn sich ohne eine gehörige Portion Glück oder Unbekümmertheit kein 150-Zeichen-CMD-Oneliner in das @-Feld des neues Directory-Shell-Eintrags trümmern lässt-..
-->okay. Ist dann halt so. Dann davon Finger wech. Agree.
Aber dort an diese Stelle, wo vor drei, vier Kommentaren noch "attrib +A %1" oder ähnlich stand,
wenn dort ein Batch mit "cmd /k D:\batches\ArchivViaKontextMenue.bat" aufgerufen werden würde -- reicht das denn nicht?
Und bezogen auf die aller-ursprünglichste Fragestellung ganz ganz oben im Eröffnungsbeitrag wäre das doch ohnehin nur ein Spezialfall des Jede-Nacht-Über-Alle-Ordner-Laufs.
Somit könnte man/frau doch DIESEN Batch aufbohren um einen Spezialparameter "ViaKontextMenue", damit er seinen Job nur nbezogen auf diesen einen Ordner macht und nicht auf alle.
Grüße
Biber
@Biber
Grüße
bastla
Aber dort an diese Stelle, wo vor drei, vier Kommentaren noch "attrib +A %1" oder ähnlich stand,
wenn dort ein Batch mit "cmd /k D:\batches\ArchivViaKontextMenue.bat" aufgerufen werden würde -- reicht das denn nicht?
Ja, klar (war auch mein erster diesbezüglicher Ansatz) - ist zwar ein Schritt mehr (und der Reg-Eintrag erfordert Admin-Rechte), aber für die User etwas komfortabler (und das "/k" kann nach dem Testen dann wieder ein "/c" werden ) ...wenn dort ein Batch mit "cmd /k D:\batches\ArchivViaKontextMenue.bat" aufgerufen werden würde -- reicht das denn nicht?
Grüße
bastla
Hallo DerWoWusste!
Eigentlich sollten Leerzeichen berücksichtigt werden (genug Anführungszeichen hätte ich eigentlich gesetzt ). Wie sieht den der Reg-Eintrag aus?
Der Batch wird etwas les- und wartbarer, wenn er nicht auf eine Zeile gequetscht ist, also etwa:
Grüße
bastla
Eigentlich sollten Leerzeichen berücksichtigt werden (genug Anführungszeichen hätte ich eigentlich gesetzt ). Wie sieht den der Reg-Eintrag aus?
Der Batch wird etwas les- und wartbarer, wenn er nicht auf eine Zeile gequetscht ist, also etwa:
@echo off & setlocal
set "Quelle=\\server\homes"
set "Ziel=\\server\archiv"
set "Pfad=%~f1"
echo %Pfad%|findstr /i /b /c:"%Quelle:\=\\%">nul || (
cls
echo Bitte nur Ordner aus dem Pfad "%Quelle%" auf diese Art verschieben!
echo\
pause
goto :eof
)
call set "Pfad=%%Pfad:%Quelle%=%Ziel%%%"
xcopy /e /y %1 "%Pfad%\" >nul && rd /s /q %1
bastla