Batch - Dateien kopieren und ggf. umbenennen
[Edit Biber:] Originaltitel "[Batch] Dateien kopieren und ggf. umbenennen" beim Verschieben geändert.
Die eckigen Klammern sind nicht mehr speicherbar im Titel.
[Edit]
Hallo allerseits,
habe mittlerweile versucht seit einigen stunden eine Antwort für mein Problem im Forum zu finden, jedoch komme ich einfach nicht weiter.
Mittels einer Batch Datei möchte ich ein Backup von einem Laufwerk machen. Diese Dateien sollen auf ein anderes Laufwerk kopiert werden.
Vor dem kopieren soll geprüft werden, ob bereits Ordner oder Dateien mit gleichen Namen bereits auf dem Backup Laufwerk vorhanden ist. Sollte dies der Fall sein, soll an den Dateien bzw Ordnern das aktuelle Datum angehängt werden.
Mein Ansatz sieht wie folgt aus;
@echo off
Set parentdir=X:\
Set targetdir=F:\
xcopy "%parentdir%" %targetdir% /e /q /h /y
Weiter bin ich bissher nicht gekommen, hoffe ihr könnt mir weiterhelfen, habe wie gesagt mit den anderen Beiträgen aus dem Forum bezüglich dieses Themas nix anfangen können.
Die eckigen Klammern sind nicht mehr speicherbar im Titel.
[Edit]
Hallo allerseits,
habe mittlerweile versucht seit einigen stunden eine Antwort für mein Problem im Forum zu finden, jedoch komme ich einfach nicht weiter.
Mittels einer Batch Datei möchte ich ein Backup von einem Laufwerk machen. Diese Dateien sollen auf ein anderes Laufwerk kopiert werden.
Vor dem kopieren soll geprüft werden, ob bereits Ordner oder Dateien mit gleichen Namen bereits auf dem Backup Laufwerk vorhanden ist. Sollte dies der Fall sein, soll an den Dateien bzw Ordnern das aktuelle Datum angehängt werden.
Mein Ansatz sieht wie folgt aus;
@echo off
Set parentdir=X:\
Set targetdir=F:\
xcopy "%parentdir%" %targetdir% /e /q /h /y
Weiter bin ich bissher nicht gekommen, hoffe ihr könnt mir weiterhelfen, habe wie gesagt mit den anderen Beiträgen aus dem Forum bezüglich dieses Themas nix anfangen können.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 43669
Url: https://administrator.de/contentid/43669
Ausgedruckt am: 18.11.2024 um 03:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo schplint!
Vielleicht kannst Du konkreter beschreiben, was Du vor hast, insbesondere wie viele verschiedene Dateiversionen Du aufheben willst. Nach Deiner obigen Aussage würden nämlich (durch das Umbenennen) überhaupt niemals alte Sicherungsstände überschrieben, wodurch Du vermutlich mit der Zeit Platzprobleme bekämst.
Nicht sinnvoll ist es, sowohl Ordner- als auch Dateinamen für in der Sicherung bereits vorhandene Elemente zu verändern - eines von beidem genügt. Zur Demonstration zwei Varianten:
Wenn Du kein Problem damit hast, Ordner unter anderem Namen zu speichern, könntest Du gleich die ganze Sicherung in jeweils einen neuen Ordner legen und dort (um Platz zu sparen) nur die veränderten Dateien (Schalter /m) hinkopieren, also etwa so:
Um das Tagesdatum als Ordnernamen zu verwenden, kannst Du Dich an der unten beschriebenen Lösung (hier geklaut bei Biber) mit VBScript und der Variablen "Datum" orientieren.
Wenn es kein Problem ist, dass sich Dateinamen ändern, könnstest Du die ursprüngliche Ordnerstruktur beibehalten und generell die Sicherungsdateien mit angefügtem Datum speichern. Das ginge so:
Zunächst ist der folgende Code als "GetDate.vbs" zu speichern (in meinem Beispiel im Ordner "Z:\Scripts"), um das aktuelle Datum im Format "JJJJ-MM-TT" zu erzeugen:
Die für die Sicherung zuständige Batchdatei sieht wie folgt aus:
Hier wird im ersten Schritt die Ordnerstruktur kopiert und im zweiten Schritt jede einzelne Datei unter einem um das Datum erweiterten Namen in den entsprechenden Ordner übertragen. Bei Bedarf lassen sich Quelle (X und Ziel (F natürlich variabel gestalten.
Einschränkung: Es werden keine versteckten oder Systemdateien kopiert.
Bei Verwendung dieser Alternative würde in jedem Ordner des Backups die aktuelle Version aller Dateien zu allen bereits vorhandenen hinzugefügt, sodass Du als nächstes nach einer Löschstrategie suchen müsstest ...
Solltest Du wirklich viele verschiedene Versionen benötigen, empfiehlt sich aber ohnehin eher etwas in der Art: Version Backup. Vielleicht findet sich auch hier etwas Brauchbares ...
HTH
bastla
Da der Link zu dem alten, aber wie ich finde, guten "TaskZip" tot zu sein scheint: http://download.pchome.de/download/taskzip-v2.10.0002_484.html
Vielleicht kannst Du konkreter beschreiben, was Du vor hast, insbesondere wie viele verschiedene Dateiversionen Du aufheben willst. Nach Deiner obigen Aussage würden nämlich (durch das Umbenennen) überhaupt niemals alte Sicherungsstände überschrieben, wodurch Du vermutlich mit der Zeit Platzprobleme bekämst.
Nicht sinnvoll ist es, sowohl Ordner- als auch Dateinamen für in der Sicherung bereits vorhandene Elemente zu verändern - eines von beidem genügt. Zur Demonstration zwei Varianten:
Wenn Du kein Problem damit hast, Ordner unter anderem Namen zu speichern, könntest Du gleich die ganze Sicherung in jeweils einen neuen Ordner legen und dort (um Platz zu sparen) nur die veränderten Dateien (Schalter /m) hinkopieren, also etwa so:
xcopy /e /h /m /q /y X:\*.* F:\2006-11-04\*.*
Wenn es kein Problem ist, dass sich Dateinamen ändern, könnstest Du die ursprüngliche Ordnerstruktur beibehalten und generell die Sicherungsdateien mit angefügtem Datum speichern. Das ginge so:
Zunächst ist der folgende Code als "GetDate.vbs" zu speichern (in meinem Beispiel im Ordner "Z:\Scripts"), um das aktuelle Datum im Format "JJJJ-MM-TT" zu erzeugen:
WScript.Echo Year(Date) & "-" & Right("0" & Month(Date),2) & "-" & Right("0" & Day(Date), 2)
Die für die Sicherung zuständige Batchdatei sieht wie folgt aus:
@echo off & setlocal
for /f %%d in ('cscript //nologo Z:\Scripts\GetDate.vbs') do set Datum=%%d
xcopy /t "X:\*.*" "F:\*.*"
pushd X:\
for /r %%i in (*.*) do copy "%%i" "F:\%%~pi%%~ni-%Datum%%%~xi"
popd
Hier wird im ersten Schritt die Ordnerstruktur kopiert und im zweiten Schritt jede einzelne Datei unter einem um das Datum erweiterten Namen in den entsprechenden Ordner übertragen. Bei Bedarf lassen sich Quelle (X und Ziel (F natürlich variabel gestalten.
Einschränkung: Es werden keine versteckten oder Systemdateien kopiert.
Bei Verwendung dieser Alternative würde in jedem Ordner des Backups die aktuelle Version aller Dateien zu allen bereits vorhandenen hinzugefügt, sodass Du als nächstes nach einer Löschstrategie suchen müsstest ...
Solltest Du wirklich viele verschiedene Versionen benötigen, empfiehlt sich aber ohnehin eher etwas in der Art: Version Backup. Vielleicht findet sich auch hier etwas Brauchbares ...
HTH
bastla
Da der Link zu dem alten, aber wie ich finde, guten "TaskZip" tot zu sein scheint: http://download.pchome.de/download/taskzip-v2.10.0002_484.html
Moin schplint,
ebenso wie bastla würde ich erst mal, vor der handwerklichen Umsetzung, die Strategie überdenken.
Den jeweils schon vorhandenen Dateien jeweils das Datum des Kopierens anzuhängen, ist auch IMHO keine so bestechende Idee.
Dann hast Du ja definitiv hinterher in Quell- und Zielverzeichnis unterschiedliche Dateinamen - wenn Du tatsächlich mal rücksichern musst, ist es allesGrütze schwierig.
Die zuletzt bearbeiteten Dateinamen in Deinen Applikationen (Word, Excel.. alles was einen "Verlauf" benutzt) passen alle nicht.
However, um Deine Frage dennoch zu beantworten:
Mach 3 xcopy's.
Zuerst stelle mit einem Xcopy fest, welche Dateien schon im Zielverzeichnis vorhanden sind.
Dafür jibbet den Parameter /U.
[Das Beiwerk mit Zusammenbasteln von %datumsprefix% hab ich mal übersprungen; gibts hier mehrfach im Bereich Batch und Shell.]
Gruß
Biber
ebenso wie bastla würde ich erst mal, vor der handwerklichen Umsetzung, die Strategie überdenken.
Den jeweils schon vorhandenen Dateien jeweils das Datum des Kopierens anzuhängen, ist auch IMHO keine so bestechende Idee.
Dann hast Du ja definitiv hinterher in Quell- und Zielverzeichnis unterschiedliche Dateinamen - wenn Du tatsächlich mal rücksichern musst, ist es alles
Die zuletzt bearbeiteten Dateinamen in Deinen Applikationen (Word, Excel.. alles was einen "Verlauf" benutzt) passen alle nicht.
However, um Deine Frage dennoch zu beantworten:
Mach 3 xcopy's.
Zuerst stelle mit einem Xcopy fest, welche Dateien schon im Zielverzeichnis vorhanden sind.
Dafür jibbet den Parameter /U.
...
XCopy [deineXCopyParameter] /U /L quelle ziel\ >%temp%\JibbetSchon.Lst
XCopy [deineXCopyParameter] /Exclude:%temp%\JibbetSchon.Lst quelle ziel\
Xcopy [deineXCopyParameter] /U quelle ziel\%datumsprefix%_*.*
[Das Beiwerk mit Zusammenbasteln von %datumsprefix% hab ich mal übersprungen; gibts hier mehrfach im Bereich Batch und Shell.]
Gruß
Biber
@Biber
Übrigens: "%datumsprefix%_*.*" als Ziel funktioniert bei mir nicht.
Und weil Du grad in der Gegend bist: Gibt es eigentlich für XCOPY etwas in der Art von /-i (also: Ziel ist Datei und nicht Verzeichnis)?
Grüße
bastla
Den jeweils schon vorhandenen Dateien jeweils das Datum des Kopierens anzuhängen, ist auch IMHO keine so bestechende Idee.
Hoffentlich hat's zur Abschreckung gereicht , weil für Versionierung gibt's auf jeden Fall Besseres ...Übrigens: "%datumsprefix%_*.*" als Ziel funktioniert bei mir nicht.
Und weil Du grad in der Gegend bist: Gibt es eigentlich für XCOPY etwas in der Art von /-i (also: Ziel ist Datei und nicht Verzeichnis)?
Grüße
bastla
@bastla
Moin bastla,
Jau, stimmt... habe es auch grad ausprobiert...macht der XCopy nicht...*axelzuck*
Dann eben mit einer Zeile "FOR /F... ...copy.... " statt der dritten XCopy-Zeile...
In dieser Exclude-List stehen doch schon alle Quell-Dateien, die es im Zielverzeichnis schon gibt.
Also machen wir das Kopieren dieser Dateien inclusive Umbenennen mit normalem Copy.
Zur zweiten Frage... hab ich auch noch nicht probiert.
Werde ich mal in einer ruhigen Minute.
Grüße
Biber
Moin bastla,
Übrigens: "%datumsprefix%_*.*" als Ziel funktioniert bei mir nicht.
Jau, stimmt... habe es auch grad ausprobiert...macht der XCopy nicht...*axelzuck*
Dann eben mit einer Zeile "FOR /F... ...copy.... " statt der dritten XCopy-Zeile...
In dieser Exclude-List stehen doch schon alle Quell-Dateien, die es im Zielverzeichnis schon gibt.
Also machen wir das Kopieren dieser Dateien inclusive Umbenennen mit normalem Copy.
...
for /f "delims=. tokens=1-3" %%a in ("%date%") do set "dateprefix=%%c-%%b-%%a"
XCopy [deineXCopyParameter] /U /L %quelle% %ziel%\ >%temp%\JibbetSchon.Lst
XCopy [deineXCopyParameter] /Exclude:%temp%\JibbetSchon.Lst %quelle% %ziel%\
for /f "delims=" %%i in (%temp%\JibbetSchon.Lst) do (
copy "%%i" "%ziel%\%%~ni_%dateprefix%%%~xi"
)
...
Zur zweiten Frage... hab ich auch noch nicht probiert.
Werde ich mal in einer ruhigen Minute.
Grüße
Biber
@Biber
Bekommst Du mit dem einfachen "copy" nicht Probleme mit dem Ziel-Pfad (gefragt war ja ua "xcopy /e" und damit wohl auch /s)?
Grüße
bastla
Bekommst Du mit dem einfachen "copy" nicht Probleme mit dem Ziel-Pfad (gefragt war ja ua "xcopy /e" und damit wohl auch /s)?
Grüße
bastla
@bastla
Dann muss/müsste eben noch eine "FOR /R quellroot....DO "-Anweisung außen drumherum und je Unterverzeichnis ein XCopy OHNE /s /e abgefeuert werden...
Ich denke aber, das eigentliche Problem ist mein Unterbewusstsein, das sich offensichtlich hartnäckig dagegen sträubt, sich mit schplints Plan ernsthaft anzufreunden.
Handwerklich lösbar ist es sicher, aber es ist nicht so charmant...
Grüße
Biber
Bekommst Du mit dem einfachen "copy" nicht Probleme ...
Stimmt schon, obwohl... "Problem" würde ich es noch nicht nennen...*ggDann muss/müsste eben noch eine "FOR /R quellroot....DO "-Anweisung außen drumherum und je Unterverzeichnis ein XCopy OHNE /s /e abgefeuert werden...
Ich denke aber, das eigentliche Problem ist mein Unterbewusstsein, das sich offensichtlich hartnäckig dagegen sträubt, sich mit schplints Plan ernsthaft anzufreunden.
Handwerklich lösbar ist es sicher, aber es ist nicht so charmant...
Grüße
Biber
@Biber
ACK, wobei ein (fertiger) Plan ja noch gar nicht wirklich vorliegt.
(Ich hab's oben auch nur zu Übungszwecken versucht - was Du ja nicht brauchst )
Grüße
bastla
Ich denke aber, das eigentliche Problem ist mein Unterbewusstsein, das sich offensichtlich hartnäckig dagegen sträubt, sich mit schplints Plan ernsthaft anzufreunden.
ACK, wobei ein (fertiger) Plan ja noch gar nicht wirklich vorliegt.
(Ich hab's oben auch nur zu Übungszwecken versucht - was Du ja nicht brauchst )
Grüße
bastla
Hallo zusammen,
ich würd egerne was ähnliches, nur noch viel einfacheres machen.
Ich hätte gerne eine Batch, die mir die datei "Z:\proggies\Dokument.doc" in "f:\Backup" kopiert und dabei den Dateinamen mit dem aktuellen Datum ergänzt im sinne 070707_Dokuemtn.doc.
Ist so was einfach möglich?
Danke und Gruß,
Nermin
ich würd egerne was ähnliches, nur noch viel einfacheres machen.
Ich hätte gerne eine Batch, die mir die datei "Z:\proggies\Dokument.doc" in "f:\Backup" kopiert und dabei den Dateinamen mit dem aktuellen Datum ergänzt im sinne 070707_Dokuemtn.doc.
Ist so was einfach möglich?
Danke und Gruß,
Nermin
Moin Hajvazovic,
Dich hab ich ja lange nicht gelesen hier, welcome bäck.
Mach bitte für Deine Frage einen neuen Beitrag auf, falls Du über Forumssuche nach "batch umbenennen Zeit Datum" nichts Passendes findest.
Denn dieser Beitrag ist schon so verkorkst, dass ich den auch jetzt sofort schließe...
schplint hat sich sicherlich schon anderen wichtigen Fragen zugewandt.
Grüße
Biber
Ach ja, und ich verschiebe gleich mal den Beitrag von "Windows" nach "Batch & Shell".
Obwohl ich eigentlich gar nicht dort haben will...
Dich hab ich ja lange nicht gelesen hier, welcome bäck.
Mach bitte für Deine Frage einen neuen Beitrag auf, falls Du über Forumssuche nach "batch umbenennen Zeit Datum" nichts Passendes findest.
Denn dieser Beitrag ist schon so verkorkst, dass ich den auch jetzt sofort schließe...
schplint hat sich sicherlich schon anderen wichtigen Fragen zugewandt.
Grüße
Biber
Ach ja, und ich verschiebe gleich mal den Beitrag von "Windows" nach "Batch & Shell".
Obwohl ich eigentlich gar nicht dort haben will...