Kombinieren Sie zwei Sätze von Ordnern in einer neuen Struktur

382
scotcht

Ich habe zwei Sätze von Ordnern, dh zwei Versionen derselben Daten mit identischen Unterordnern (200+). Ich muss die Sets mit einer Charge zu einer etwas neuen Struktur kombinieren. Zum Beispiel:

SetA \ Ordner1 \ A_Dateien  \ Ordner2 \ A_Dateien  \ Ordner3 \ A_Dateien  
SetB \ Ordner1 \ B_Dateien  \ Ordner2 \ B_Dateien  \ Ordner3 \ B_Dateien  

Ich muss setA so einrichten:

setA \ ordner1 \ A_files_folder \ A_files  \ B_files_folder \ B_files  \ A_files  \ folder2 \ A_files_folder \ A_files  \ B_files_folder \ B_files  \ A_files  \ folder3 \ A_files_folder \ A_files  \ B_files_folder \ B_files  \ A_files  

Grundsätzlich erhält setA zwei neue Ordner, einen für eine Kopie von A_files und einen, in den B_files verschoben werden sollen. Am Ende wird nichts aus setA entfernt und der setB- Ordner wird gelöscht.

Einfach, aber schwer zu erklären.

Danke für Ihre Hilfe!

0
Bitte [bearbeiten] Sie Ihre Frage, um anzugeben, was Sie bisher versucht haben. Worthwelle vor 5 Jahren 2
Wie viele ordner Kopieren Sie die Dateien nur für 3 Ordner manuell. harrymc vor 5 Jahren 0
200 Ordner in jedem Satz scotcht vor 5 Jahren 0
(1) Ich verstehe nicht, warum Sie `setA \ folderN \ A_files` und` setA \ folderN \ A_files_folder \ A_files` haben. (2) Unterteilen Sie es in einfachere Schritte und schreiben Sie Skripte: (2a) Verschieben Sie `setB \ folder1 \ B_files` in` setB \ folder1 \ B_files_folder \ B_files` (2b), um dies für alle `folderN` (2c) tun Dasselbe gilt für A (2d), um alle `B_files_folder` unter` setB` in `setA` zu verschieben. dirkt vor 5 Jahren 0

1 Antwort auf die Frage

0
bcs78

Auf SuperUser finden Sie eine Vielzahl ähnlicher Fragen mit entsprechenden Antworten, um zu erfahren, wie Sie ein Skript dafür schreiben. Da Sie nicht erwähnt haben, welches Betriebssystem Sie verwenden, werde ich eine Powershell-Lösung für Windows bereitstellen.

Erstellen Sie die neuen Unterordner in jedem Ordner in setA, führen Sie dann eine Schleife durch die Dateien von setA durch und kopieren Sie sie in die entsprechenden Ordner A_files_folder.

Foreach ($dir in Get-ChildItem -Directory -Recurse .\setA) { New-Item -Path $dir.FullName -Name "A_files_folder" -ItemType "Directory"; New-Item -Path $dir.FullName -Name "B_files_folder" -ItemType "Directory"; }  Foreach ($file in Get-ChildItem -File -Recurse .\setA) { Copy-Item -Path $file.FullName -Destination $($file.DirectoryName + "\A_files_folder\") } 

Wenn Sie sich mit dem zweiten Teil des Jobs befassen, müssen Sie den Zielpfad mit Teilen des ursprünglichen Dateipfads erstellen. Dieser ist jedoch fast identisch mit dem vorherigen Copy-ItemBefehl. Ich würde das verwenden:

Foreach ($file in Get-ChildItem -File -Recurse .\setB) { Move-Item -Path $file.FullName -Destination $(".\setA\" + $($file.DirectoryName.Split("\")[-1]) + "\B_files_folder\") }