Batch Datein aus mehreren Unterordnern in einen Ordner kopieren und umbennenen

hes23

Newbie
Registriert
Dez. 2017
Beiträge
4
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.

Code:
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

Code:
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?
 
Zuletzt bearbeitet:
Geht sicher auch in Batch, aber wenn Powershell eine Option wäre ginge das sicher schneller und einfacher

Wäre Powershell für dich denkbar?
 
Ja Natürlich, nur sind meine Powershell Kenntnisse nicht besonders viel besser wie Batch :p
Hättest du einen Lösungsansatz?
 
Ja, aber heute komme ich nicht mehr dazu.. wenn bis morgen sich kein Batch Profi findet kann ich dir morgen was schicken
 
Wuerde es reichen den Ordnernamen davor zu schreiben
Code:
von
C:\bla\185252\2827222.jgw
nach 
C:\bla\185252-2827222.jgw
oder
C:\bla\2827222-185252.jgw

185252-2827222.jgw
185252-2827222.jpg
185253-2827222.jgw
185253-2827222.jpg
oder ist das nicht sinnvoll in diesem Fall?
 
Eigentlich wäre es egal, aber bin mir nicht sicher ob ich die Daten so weiterverarbeiten kann.
Mit der Nummerierung am Ende würde es funktionieren *(1).jpg
 
Du kannst beim copy-Befehl auch einen Zieldateinamen angeben ...
Destination : Required. Specifies the location to which you want to copy a file or set of files. Destination can consist of a drive letter and colon, a folder name, a file name, or a combination of these.

Du könntest also eine Schleife über die Unterverzeichnisse machen, dabei eine Zählvariable hochzählen und diese Zählvariable in den Zieldateinamen einbauen ...
 
so würds in powershell gehen ... ordnerstruktur anbei, musst du ggf. anpassen

Code:
$basepath = #dein ordner
$target_dir = "Gesamt"
$source_dir = "Datenordner"
$folders = Get-ChildItem (Join-Path $basepath -ChildPath $source_dir)

foreach ($folder in $folders) {

$existingitems = $null
$copyitems = $null
$copyitems = Get-ChildItem $folder.FullName
$existingitems = Get-ChildItem (Join-Path $basepath -ChildPath $target_dir)

foreach ($copyitem in $copyitems) {

echo $copyitem.Name

if ($copyitem.Name -in $existingitems.Name) {
    for ($i = 1; $i -ne 0; $i++) {
        $newname = ($copyitem.BaseName + '(' + $i + ')' + $copyitem.Extension)

        if ($newname -notin  $existingitems.Name) {

        $newfullname = (Join-Path $basepath -ChildPath $target_dir)
        $newfullname = (Join-Path $newfullname -ChildPath $newname)
        Copy-Item $copyitem.FullName -Destination $newfullname
        $i = -1             
        }

        
        }
    }

else 
    {
    Copy-Item $copyitem.FullName -Destination (Join-Path $basepath -ChildPath $target_dir)
    }


}



}
 

Anhänge

Zuletzt bearbeitet:
Da musst du den Pfad zu deinem Bilder Verzeichnis ein Anfuehrungszeichen eintragen.

Code:
$basepath = "C:\bla"
$target_dir = "Gesamt" # beinhaltet dann die neu sortieren Dateien (C:\bla\Gesamt)
$source_dir = "Datenordner" # beinhaltet die unsortierten Dateien (C:\bla\Datenordner) also die Dateien die du jetzt sortieren moechtest (musst ggf. verschieben)
 
Zuletzt bearbeitet:
Jup... wenn du den gesamt ordner vorher noch ablöschen willst muss ein remove-item -recurse -force noch am Anfang ins Skript.
 
Zurück
Oben