shorty-xs
Goto Top

Dateien aus einer Verzeichnisstruktur in eine andere kopieren wenn am Ziel schon vorhanden

Ich habe ja nun schon viele Informationen hier im Forum gefunden, nun möchte ich auch mal was zurück geben.

Nach einen Datenkrash wurden 2 Verzeichnisstrukturen wieder hergestellt. In der einen sind die Dateien OK, in der anderen der Verzeichnis baum.
Nun sollen die Dateien von A nach B kopiert werden, wenn die jeweilige Datei in B schon vorhanden ist, weil die Datein in B sich nicht öffnen lassen.

Ich habe die tools:
Wfolder2
Wbusy
Wprompt
winput
von Horst Schäffer benutzt, diese müssen im gleiche Verzeichnis wie die Batch datei abgelegt sein.
Es wird je Datum eine Logdatei erzeugt, darin enthalten sind Zeitstempel, der jeweiligen Aktion.
Es gibt eine Testfunktion, bei der erstmal nur untersucht wird und die zu kopierenden Daten ins Log geschrieben werden.
Die Arbeitsweise kann auf bestimmte Dateiendungen reduziert werden, da z.B. Bilder von einer Kamera gerne mal wieder bei DCFxyz001 anfangen, obwohl man die ja schonmal auf der Platte hat. So kann ich also mal mit anderen Dateiendungen anfangen und mich langsam durcharbeiten.
Ich bitte den deutsch/ englisch Mischmasch zu entschuldingen.

Vielleicht kann damit jemand was anfangen.

Hier der Source Code:
:: sorter.cmd 
:: (C) 2009 by Malte Schroeder 
@echo off
color 02
set _title=File Sorter v1.0 by Malte Schroeder (C) 2009
title %_title%

:start
:::::::::::::::::::::::::::::::::::::
::   Eingangsvariablen definieren  ::
:::::::::::::::::::::::::::::::::::::
set _input=leer
set _output=leer
set _mode=leer
:::::::::::::::::::::::::::::::::::::
::   Dateiendung definieren        ::
:::::::::::::::::::::::::::::::::::::
winput "set _ext=$input" "Please enter file extension (3 letters only) or * for all" > %temp%\ext.cmd  
if errorlevel 1 goto ende
call %temp%\ext.cmd
del %temp%\ext.cmd

:::::::::::::::::::::::::::::::::::::
::   Input Verzeichnis definieren  ::
:::::::::::::::::::::::::::::::::::::
if [%_input%]==[leer] call :fldsel Input
set _input=%_fldr%
if [%_output%]==[leer] call :fldsel Output
set _output=%_fldr%
:::::::::::::::::::::::::::::::::::::
::   Input Verzeichnis lesen       ::
:::::::::::::::::::::::::::::::::::::
start wbusy "File Sorter" "Read Input Directory" /marquee  
dir %_input%\*.%_ext% /b /s > in.txt
wbusy "File Sorter" "Read Input Directory" /stop /timeout=1  
:::::::::::::::::::::::::::::::::::::
::   Output Verzeichnis lesen      ::
:::::::::::::::::::::::::::::::::::::
start wbusy "File Sorter" "Read Output Directory" /marquee  
dir %_output% /b /s > out.txt
wbusy "File Sorter" "Read Output Directory" /stop /timeout=1  
:::::::::::::::::::::::::::::::::::::
::   Arbeitsmodus auswählen        ::
:::::::::::::::::::::::::::::::::::::
wprompt "%_title%" "Do you want to use Test mode" YesNoCancel ?  
if errorlevel 3 goto ende
if errorlevel 2 set _mode=sharp
if errorlevel 1 set _mode=test
if %_mode%==sharp (
          wprompt "%_title%" "ATTENTION You don't use Test-mode, target files could be permanently damaged!" YesNo !  
		  if errorlevel 2 goto ende
		  )
:::::::::::::::::::::::::::::::::::::
::  Vergleich starten und kopieren ::
:::::::::::::::::::::::::::::::::::::
start wbusy "File Sorter" "Sorting in Progress...." /marquee  
for /F "delims=" %%I in (in.txt) do call :subfinder "%%I"  
wbusy "File Sorter" "Sorting done." /stop /timeout=0  
goto ende

:fldsel
set _fldr=
Wfolder2 "set _fldr=" "%userprofile%" "%1 directory" > %temp%\folder.cmd  
call %temp%\folder.cmd
del %temp%\folder.cmd
goto :eof

:subfinder
for /F "delims=" %%A in (out.txt) do (  
   if "%~nx1" == "%%~nxA" ( if %_mode%==sharp (xcopy %1 "%%A" /y /h /v /l /r   
   echo %time% -- kopiere %1 nach "%%A" >> %date%.log) else ( echo %1 would be copied to %%A  
		 echo %time% %1 would be copied to %%A >> %date%.log)
     )
)
goto :eof

:ende 
del in.txt
del out.txt
set _input=
set _output=
notepad %date%.log

Greetz
Malte

Content-Key: 106108

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

Printed on: April 23, 2024 at 21:04 o'clock

Member: Iwan
Iwan Jan 15, 2009 at 11:15:42 (UTC)
Goto Top
Mahlzeit,

warum einfach wenn es auch kompliziert geht:
xcopy QUELLE ZIEL /s /v /u /y
Member: shorty-xs
shorty-xs Jan 15, 2009 at 11:20:08 (UTC)
Goto Top
Weil beide Verzeichnisstrukturen komplett unterschiedlich sind. Das Ziel enthält die ursprüngliche Sortierung der Dokumente, beim wiederherstellen der Daten (das was jetzt die Quelle ist) sind die Verzeichnisse maximal 2 Abzweigungen tief und einfach durchnummeriert. Ich muss also erstmal feststellen welche Datei wohin kopiert werden soll.

Wenn das so einfach gesesen währe, hätte ich die dateien auch einfach per drag'n drop rüberziehen können.