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-ID: 294582

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

Ausgedruckt am: 15.11.2024 um 19:11 Uhr

Radioflyer
Radioflyer 29.01.2016 aktualisiert um 07:50:13 Uhr
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
minista
minista 29.01.2016 um 07:54:06 Uhr
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....
TryAndSolve
Lösung TryAndSolve 29.01.2016 aktualisiert um 10:02:29 Uhr
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}
minista
minista 29.01.2016 um 08:36:32 Uhr
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?
TlBERlUS
Lösung TlBERlUS 29.01.2016 aktualisiert um 10:02:26 Uhr
Goto Top
Mit diesem Such-Parameter sollte das klappen.
Get-ChildItem -Recurse $pfad | ?{$_.mode -eq "-a---" }  
TryAndSolve
Lösung TryAndSolve 29.01.2016 aktualisiert um 10:02:20 Uhr
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
    }
}
TlBERlUS
TlBERlUS 29.01.2016 um 09:15:49 Uhr
Goto Top
Wurde die Datei dann nicht umbenannt?

Ansonsten könnte man mit
test-path und rename-item arbeiten
TryAndSolve
TryAndSolve 29.01.2016 aktualisiert um 09:29:09 Uhr
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.
TlBERlUS
TlBERlUS 29.01.2016 um 09:30:07 Uhr
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
}
}
minista
minista 29.01.2016 um 10:03:02 Uhr
Goto Top
Super! Vielen Dank Jungs!!