loveboat
Goto Top

Batch für Kopieren bzw. Ersetzten, wenn...

Kopieren großer Datenmengen mit teilweise gleichen Dateinamen

Hallo,

Ich muss im Rahmen einer Datensicherung von verschiedenen Partitionen große Datenmengen zusammentragen und auf einen Sicherungsserver speichern. Dabei stoße ich immer wieder auf das Problem dass Dateien zwar gleich heißen, aber nicht die gleichen sind, da unterschiedlich groß.
Gibt es ein Batch oder einen cmd-Zeilen Code, der es mir ermöglicht gleichgroße Dateien zu ersetzen, ungleichgroße Dateien allerdings nicht zu ersetzen?

Wäre für Hilfe dankbar!

Gruß,
LB

Content-Key: 110631

Url: https://administrator.de/contentid/110631

Printed on: April 26, 2024 at 11:04 o'clock

Member: bastla
bastla Mar 05, 2009 at 13:33:59 (UTC)
Goto Top
Hallo LoveBoat!

Schematisch etwa so:
for %i in ("D:\Quellordner\*.typ") do for %a in ("X:\Zielordner\%~nxi") do if %~zi==%~za copy "%i" %a  
Als Batch natürlich jedes "%"-Zeichen verdoppeln.

Grüße
bastla
Member: LoveBoat
LoveBoat Mar 05, 2009 at 14:22:40 (UTC)
Goto Top
Yes, klappt! ...........................wunderbar!
Member: LoveBoat
LoveBoat Mar 11, 2009 at 12:21:51 (UTC)
Goto Top
So, jetzt doch noch zwei Sachen aufgefallen:

1. Ein Bericht wäre gut, dh. eine txt-file die mir sagt welche Dateien und welche nicht kopiert wurden.

2. Ich habe einen Denkfehler begangen; es sollen natürlich zunächst einmal ALLE, dh. auch diejenigen Dateien, die nicht im Zielordner aber in Ursprungsordner drinne sind verschoben / kopiert werden. Wenn dann welche sowohl in Ursprungs- als auch Zielordner vorliegen, dann soll diese Regelung greifen die nur die gleichgroßen kopiert. Was dann übrigbleibt hat zwar den selben Dateinamen, aber eine andere Größe. (Das würde dann auch einen Bericht überflüssig machen).
Member: bastla
bastla Mar 11, 2009 at 15:45:33 (UTC)
Goto Top
Hallo LoveBoat!

Dann etwa so:
@echo off & setlocal
set "Quelle=D:\Quellordner\*.typ"  
set "Ziel=X:\Zielordner"  
set "LogK=X:\Kopiert.txt"  
set "LogNK=X:\NichtKopiert.txt"  

if exist "%LogK%" del "%LogK%"  
if exist "%LogNK%" del "%LogNK%"  

for %%i in ("%Quelle%") do (  
    if not exist "%Ziel%\%%~nxi" (  
        copy "%%i" "%Ziel%"  
        >>"%LogK%" echo %%i  
    ) else (
        for %%a in ("%Ziel%\%%~nxi") do if %%~zi==%%~za (  
            copy "%%i" "%Ziel%"  
            >>"%LogK%" echo %%i  
        ) else (
            >>"%LogNK%" echo %%i  
        )
    )
)
Grüße
bastla
Member: LoveBoat
LoveBoat Mar 12, 2009 at 09:44:52 (UTC)
Goto Top
OK Ich versuchs so. Als Batch müssen die "%" verdoppelt werden, so wars doch`?#

Bzw: An welcher Stelle muss ich was einfügen, verwirrend finde ich ("%Quelle%") und "%Ziel%\%%~nxi", welche Zeichen sollen stehen bleiben und welche muss ich rauslöschen wenn ich Quell- bzw Zielpfad einsetze?
Member: bastla
bastla Mar 12, 2009 at 09:56:44 (UTC)
Goto Top
Hallo LoveBoat!

Ist bereits ein Batch (das Verdoppeln von "%" gilt vor allem für Laufvariable einer "for"-Schleife, aber nicht für jegliche "%").

An welcher Stelle muss ich was einfügen
Anzupassen wären eigentlich nur noch die Pfade in den Zeilen 2 bis 4 [Edit] auch Zeile 5 [/Edit].

Grüße
bastla
Member: LoveBoat
LoveBoat Mar 12, 2009 at 10:48:23 (UTC)
Goto Top
Hallo Bastla,

ja habs gemerkt. Allerdings gibt mir dieser Batch nur die kopierten Dateien als txt aus. Mich würde aber vielmehr interessieren welche nicht kopiert wurden. Am besten wäre, wie gesagt, er würde die Dateien nicht kopieren sondern verschieben, so dass im Quellordner nur Dateien mit selbem Namen aber verschiedener Größe übrigbleiben.
Member: bastla
bastla Mar 12, 2009 at 11:30:46 (UTC)
Goto Top
Hallo LoveBoat!

Eigentlich solltest Du auch eine Datei "NichtKopiert.txt" (wie in Zeile 5 festgelegt - daher bitte auch diesen Pfad anpassen) erhalten - ansonsten "copy" durch "move" ersetzen.

Nur zur Sicherheit noch der Hinweis, dass "move" (wie auch "copy") gleichnamige Dateien im Zielordner ohne Rückfrage überschreibt.

Grüße
bastla
Member: LoveBoat
LoveBoat Mar 12, 2009 at 12:06:12 (UTC)
Goto Top
Ja, die Datei "NichtKopiert.txt" taucht leider nicht auf. Aber mit der "Move"-Variante dürfte das auch eigentlich nicht weiter tragisch sein.

Viele Dank!

Grüße.
LoveBoat