hese23
Goto Top

Datein aus mehreren Unterordnern in einen Ordner kopieren und umbennenen

Hallo miteinander,

habe folgendes Problem:

Von mehreren Unterordnern sind jeweils 2 Datentypen enthalten (jpg und jgw)
In jeden Ordner sind genau die gleichen Dateien entahlen (Name und Endung gleich)
Diese Dateien will Ich in einen einzigen Ordner kopieren.

FOR /F "delims=#" %i IN ('dir /ad /b /s C:\18') DO @copy "%i\" C:\Z  

Problem
Aufgrund dergleichen Dateinamen gibt es nur die Option überschreiben oder nicht.
Ich will aber alle Dateien kopieren und mit einer fortlaufenden Nummer zum unterscheiden versehen

Bsp:
Ordner 185252
-- 2827222.jgw
-- 2827222.jpg

Ordner 185253
-- 2827222.jgw
-- 2827222.jpg
usw...

Ziel:
Ordner (Gesammt)
-- 2827222.jgw
-- 2827222.jpg
-- 2827222(1).jgw
-- 2827222(2).jpg

Das mit den Umbennen funktionier auch noch nicht so ganz wie ich mir das Vorstelle

set z=0
set /a z=z+1
ren *.jpg *%z%

Habt ihr ein paar Ansätze oder Lösungvorschläge wie ich das Umsetzen kann?

Content-Key: 357909

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

Ausgedruckt am: 19.03.2024 um 10:03 Uhr

Mitglied: 134464
Lösung 134464 12.12.2017 aktualisiert um 09:58:55 Uhr
Goto Top
Heutzutage macht man sowas mit Powershell
function Copy-Flat([string]$source,[string]$destination,[string[]]$Filefilter){
    gci $source -Include $FileFilter -Recurse | %{
        $dest = "$destination\$($_.Name)";$cnt = 1  
        while(Test-Path $dest){$dest = "$destination\$($_.Basename)($cnt)$($_.Extension)"; $cnt++}  
        copy-item $_.Fullname -Destination $dest -Force
    }
}

Copy-Flat -source 'C:\18' -destination 'C:\Z' -Filefilter '*.jpg','*.jgw'  
Pfade in der letzten Zeile anpassen, feeeeedich.

Vorgang ist immer gleich egal welche Skriptsprache, in der FOR-Schleife mit einer while Schleife prüfen ob Dateiname vorhanden wenn ja dann Zähler erhöhen und so lange weitermachen bis ein Dateiname frei ist.
Mitglied: hese23
hese23 12.12.2017 um 13:21:55 Uhr
Goto Top
Würde es mit Batch auch umsetzbar sein?

Vielen Dank, funktioniert einwandfrei!
Mitglied: 134464
134464 12.12.2017 aktualisiert um 14:33:32 Uhr
Goto Top
Zitat von @hese23:

Würde es mit Batch auch umsetzbar sein?
Jepp aber warum sollte man sich das Genudel antun face-smile?!
@echo off & setlocal Enabledelayedexpansion
set "quelle=c:\18"  
set "ziel=c:\z"  
set /a cnt=1
for /f "delims=" %%a in ('dir /b /s /a-d "%quelle%" ^| findstr /iel "*.jpg *.jwg"') do (  
     call :checkfile "%%a"  
)
goto :eof

:checkfile
if not exist "%ziel%\%~nx1" (  
    copy "%~1" "%ziel%"  
    set /a cnt=1
) else (
    call :checkfile "%ziel%\%~n1(!cnt!)%~x1"  
    set /a cnt +=1
)
exit /b