jochi72
Goto Top

Batch-programm für Dateikopie und Duplikatsumbenennung

Hallo,

bin neu hier im Forum und muss mir leider mein Batch-Dateien-Wissen aus google zusammentragen.
Leider bin ich jetzt auf eine kleine Anforderung gekommen, die ich nicht lösen kann und bitte Euch um Hilfe.
Ich muss tausende von Verzeichnissen auf eine bestimmte Datei „Titelblatt*“ durchsuchen und alle diese Datein in einen einzigen Ordner reinkopieren, wo ich dann mit einem Excel Makro alle Dateien auslese und bestimmte Zellwerte in ein „Master“ Excel kopieren.
Da seit einigen Jahren alle diese Exceldateien „Titelblatt“ heißen und keine Infos mehr vom Kunden wie früher enthalten, werden im Zielverzeichnis die Dateien, welche den gleichen Namen hat, überschrieben.
D.h. ich würde gerne meinen simplen Dreizeiler unten so erweitern, dass wenn es die Datei schon gibt, die Datei mit einer fortlaufenden Nummer oder was auch immer (mir ist egal wie die Dateien heißen, nur darf keine überschrieben werden) umbenannt wird.

Vielen, vielen Dank für Eure Unterstützung.
Liebe Grüße
Joachim

SET "Startverz=\\server\Daten\Kunden"
SET "Zielverz=\\server\home\j.baader\Sammlung_Script_Titelblatt"
FOR /R "%Startverz%" %%a IN ("Titelblat*") DO copy /y "%%~a" "%Zielverz%"

Content-ID: 4099898019

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

Ausgedruckt am: 28.09.2024 um 13:09 Uhr

Xerebus
Xerebus 29.09.2022 um 14:46:05 Uhr
Goto Top
Mit datums / Zeit Stempel wäre es vermutlich am sichersten.
TK1987
Lösung TK1987 29.09.2022 um 15:05:57 Uhr
Goto Top
Moin Joachim,

Zitat von @Jochi72:
bin neu hier im Forum
na dann mal herzlich Willkommen!

Zitat von @Xerebus:
Mit datums / Zeit Stempel wäre es vermutlich am sichersten.
Und zudem auch am einfachsten umzusetzen.
@echo off

SET "Startverz=\\server\Daten\Kunden"  
SET "Zielverz=\\server\home\j.baader\Sammlung_Script_Titelblatt"  
FOR /R "%Startverz%" %%a IN ("Titelblat*") DO call :copy "%%~a"  
goto :EoF

:copy
set zeit=%~t1
set zeit=%zeit:~6,4%-%zeit:~3,2%-%zeit:~0,2%_%zeit:~-5,2%-%zeit:~-2,2%
copy "%~1" "%Zielverz%\%~n1_%zeit%%~x1"  

Alternativ in Powershell:
$Startverz = "\\server\Daten\Kunden"  
$Zielverz = "\\server\home\j.baader\Sammlung_Script_Titelblatt"  

Foreach ($File in Get-Childitem -Recurse -File "$Startverz\Titelblat*") {  
  copy $File "$Zielverz\$($File.BaseName)_$($File.LastWriteTime.ToString("yyyy-MM-dd_HH-mm"))$($File.Extension)"  
}
Warum PowerShell und nicht Batch?
Powershell Leitfaden für Anfänger

Gruß Thomas
Jochi72
Jochi72 30.09.2022 um 10:58:45 Uhr
Goto Top
Hallo Thomas,

vielen, vielen Dank für das Coding.
Funktioniert auf Anhieb perfekt.
Hatte bedenken, dass das aktuelle Änderungsdatum bzw. die Zeit in den Dateinamen geschrieben wird, aber Du liest anscheinend den ursprünglichen Timestamp der Datei aus. Echt super, somit kann es zu keinen Duplikaten kommen.

Liebe Grüße
Joachim