minista
Goto Top

Per Batch Dateien aus Unterordner verschieben

Hallo Zusammen

Ich habe folgende Struktur:

567b4a133ce52f43781e53c4b4f29d45

Ich möchte nun dass alle Dateien aus dem Ordner B und deren Subordner (B1, B2, B3) jeweils ins Verzeichnis Ordner A verschoben werden. Dazu habe ich folgenden Code zusammengestiefelt:


for /r "C:\temp\Personen\Fritz Müller\Ordner B" %f in (*) do @copy "%f" "C:\temp\Personen\Fritz Müller\Ordner A"

Der Code funktioniert, jedoch habe ich eine direkte Pfadangabe. Sprich für die 3 Beispiele geht ja das noch von Hand zu erstellen, jedoch habe ich etwa 600 solcher Ordner. Wie geht das?

Content-Key: 294582

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

Printed on: April 19, 2024 at 03:04 o'clock

Member: Radioflyer
Radioflyer Jan 29, 2016 updated at 06:50:13 (UTC)
Goto Top
Moin,

falls es die Homeverzeichnisse sind, wäre das Loginscript ne Idee.... (aber nur wenn da nicht die ganzen Firmenvideos drinne sind face-smile)

Dann musst Du auch nicht gucken, wenn jemand dazu kommt oder weg fällt.

ciao, RF
Member: minista
minista Jan 29, 2016 at 06:54:06 (UTC)
Goto Top
Hallo Radioflyer

Vielen Dank für Deine schnelle Antwort.

Es handelt sich leider nicht um Profilordner, sondern von Hand angelegte Ordner. Deshalb funktioniert das mit dem Loginskript leider nicht....
Member: TryAndSolve
Solution TryAndSolve Jan 29, 2016 updated at 09:02:29 (UTC)
Goto Top
PowerShell ftw.

$pfad = "C:\...\Personen"  

ForEach($person in Get-ChildItem $pfad) {
    $ausgangsPfad = $person.FullName + "\Ordner B"  
    $zielPfad = $person.FullName + "\Ordner A"  
    Move-Item -Path $ausgangsPfad -Destination $zielPfad}
Member: minista
minista Jan 29, 2016 at 07:36:32 (UTC)
Goto Top
Vielen Dank! Das funktioniert schon mal sehr gut.

Eventuell hätte ich das in der Problembeschreibung noch besser beschreiben sollen, denn ich möchte dass nur die Dateien verschoben werden, nicht jedoch die Ordner selbst.

Also wenn ich im Ordner B1 und B2 ein Dokument habe, soll dies direkt in der Ordner A verschoben werden ohne die Ordner B1 und B2...

Wie geht das?
Member: TlBERlUS
Solution TlBERlUS Jan 29, 2016 updated at 09:02:26 (UTC)
Goto Top
Mit diesem Such-Parameter sollte das klappen.
Get-ChildItem -Recurse $pfad | ?{$_.mode -eq "-a---" }  
Member: TryAndSolve
Solution TryAndSolve Jan 29, 2016 updated at 09:02:20 (UTC)
Goto Top
Einziges Problem was ich sehe: Wenn in den B-Unterordnern einer Person Dateien mit dem gleichen Namen liegen, kann die zweite Datei nicht auch in den Ordner Person\Ordner A\ verschoben werden...

$pfad = "C:\...\Personen"  

ForEach($person in Get-ChildItem $pfad) { 
    $zielPfad = $person.FullName + "\Ordner A"   
    $ausgangsPfad = $person.FullName + "\Ordner B"   


    $dateien = Get-ChildItem -Path $ausgangsPfad -file -Recurse # alle Files im Ordner Person\Ordner B

    ForEach($datei in $dateien) {
        Move-Item -Path $datei.FullName -Destination $zielPfad
    }
}
Member: TlBERlUS
TlBERlUS Jan 29, 2016 at 08:15:49 (UTC)
Goto Top
Wurde die Datei dann nicht umbenannt?

Ansonsten könnte man mit
test-path und rename-item arbeiten
Member: TryAndSolve
TryAndSolve Jan 29, 2016 updated at 08:29:09 (UTC)
Goto Top
Habs getestet. Powershell gibt dann die Meldung "Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist." aus.
Man könnte natürlich noch vorher prüfen ob die Datei bereits vorhanden ist und wenn ja noch was hinten anhängen.
Member: TlBERlUS
TlBERlUS Jan 29, 2016 at 08:30:07 (UTC)
Goto Top
Zitat von @TryAndSolve:

Habs getestet. Powershell gibt dann die Meldung "Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist." aus.
Ich könnte natürlich noch vorher prüfen ob die Datei bereits vorhanden ist und wenn ja noch was hinten anhängen.

Das hier dürfte in etwa funktionieren (nicht getestet)
Anstelle von _2 würde sich allerdings eher ein TimeStamp anbieten.
foreach ($f in $files){
$search = test-path $f
if ($search -eq $true){
rename-item $f -newname $f_2
}
}
Member: minista
minista Jan 29, 2016 at 09:03:02 (UTC)
Goto Top
Super! Vielen Dank Jungs!!