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

Batch - Dateien kopieren und ggf. umbenennen

Frage Entwicklung Batch & Shell

Mitglied: schplint

schplint (Level 1) - Jetzt verbinden

03.11.2006, aktualisiert 18.10.2012, 17795 Aufrufe, 9 Kommentare

[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.
Mitglied: bastla
04.11.2006, aktualisiert 18.10.2012
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:

01.
xcopy /e /h /m /q /y X:\*.* F:\2006-11-04\*.*
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:
01.
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:
01.
@echo off & setlocal 
02.
for /f %%d in ('cscript //nologo Z:\Scripts\GetDate.vbs') do set Datum=%%d 
03.
xcopy /t "X:\*.*" "F:\*.*" 
04.
pushd X:\  
05.
for /r %%i in (*.*) do copy "%%i" "F:\%%~pi%%~ni-%Datum%%%~xi" 
06.
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
Bitte warten ..
Mitglied: Biber
04.11.2006 um 19:26 Uhr
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 alles Grü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.
01.
... 
02.
XCopy [deineXCopyParameter] /U /L quelle ziel\ >%temp%\JibbetSchon.Lst 
03.
XCopy [deineXCopyParameter] /Exclude:%temp%\JibbetSchon.Lst quelle ziel\  
04.
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
Bitte warten ..
Mitglied: bastla
04.11.2006 um 19:46 Uhr
@Biber

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
Bitte warten ..
Mitglied: Biber
05.11.2006 um 18:26 Uhr
@bastla

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.
01.
... 
02.
for /f "delims=. tokens=1-3" %%a in ("%date%") do set "dateprefix=%%c-%%b-%%a" 
03.
 
04.
XCopy [deineXCopyParameter] /U /L %quelle% %ziel%\ >%temp%\JibbetSchon.Lst 
05.
XCopy [deineXCopyParameter] /Exclude:%temp%\JibbetSchon.Lst %quelle% %ziel%\  
06.
for /f "delims=" %%i in (%temp%\JibbetSchon.Lst) do ( 
07.
    copy "%%i"  "%ziel%\%%~ni_%dateprefix%%%~xi" 
08.
09.
...
Zur zweiten Frage... hab ich auch noch nicht probiert.
Werde ich mal in einer ruhigen Minute.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
05.11.2006 um 18:48 Uhr
@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
Bitte warten ..
Mitglied: Biber
06.11.2006 um 07:57 Uhr
@bastla

Bekommst Du mit dem einfachen "copy" nicht Probleme ...
Stimmt schon, obwohl... "Problem" würde ich es noch nicht nennen...*gg

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
Bitte warten ..
Mitglied: bastla
06.11.2006 um 08:22 Uhr
@Biber

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
Bitte warten ..
Mitglied: zavjah
17.07.2007 um 21:38 Uhr
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
Bitte warten ..
Mitglied: Biber
17.07.2007 um 21:55 Uhr
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...
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Batch & Shell
Dateien kopieren die nicht mehr verändert werden? (10)

Frage von pbelcl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...