2016-04-02 7 views
0

Ich möchte ein Skript zum Durchsuchen eines Verzeichnisses, sagen wir C:\books, und durchsuchen Sie Unterverzeichnisse für Dateien von eine spezifische Erweiterung, zum Beispiel .mp3.Versuchen Sie, ein Skript zum Durchsuchen eines Verzeichnisses nach Ordnern mit Dateien einer bestimmten Erweiterung dann verschieben, Verzeichnishierarchie intakt

Dann, wenn der Ordner solche Dateien enthält, möchte ich es mit der Ordnerhierarchie intakt in ein neues Verzeichnis verschieben. Nehmen wir an, C:\books\harry_potter\goblet enthält eine .mp3 Datei, die nach Bestätigung auf C:\audiobooks\harry_potter\goblet verschoben wird.

Ich denke Powershell cmdlet Get-ChildItem ist meine beste Wette piped in Move-Item, aber ich bin ein komplettes noob mit PowerShell-Skripting. Ich würde wirklich jeden Ratschlag schätzen.

+1

'Get-ChildItem' und' Move-Item' sind definitiv gute Wetten :) Was hast du bisher probiert? –

+1

Sie müssen zwei separate Aufgaben ausführen: 1) die Dateien finden und 2) die Ordner und Dateien verschieben. Suchen Sie also zunächst nach "Powershell-Suchordnern für Dateien" und arbeiten Sie an diesem Teil. Dann suchen Sie hier nach dem anderen Teil, und das funktioniert. Dann lege sie zusammen. Wenn Sie unterwegs nicht weiterkommen, können Sie den Code, den Sie geschrieben haben, veröffentlichen, das Problem erklären und eine spezifische Frage stellen, die wir beantworten können. Wir sind jedoch kein Code Writing Service; Wir erwarten von Ihnen, dass Sie sich zuerst bemühen, das Problem selbst zu lösen. –

+0

Ich bin soweit gekommen: –

Antwort

0

Etwas Ähnliches wird in der Wurzel der Sammlung tun:

(ls *.mp3 -recurse) | % { split-path $_ } | sort -u | % { cp $_ $_.Replace('c:\books', 'c:\audiobooks') } 

I verwendet cp statt mv für Sie, es zu testen, ohne Dateien beschäftigen. Erläuterung: ls gibt alle Dateien zurück, % wird dann übergeordnet, sort -u löscht Duplikate unter den Eltern, und der letzte Befehl verschiebt die Eltern an den neuen Speicherort.

+0

Danke für solch eine prägnante und elegante Lösung, aber ich habe anscheinend immer noch ein Problem. Ich erhalte den folgenden Fehler: 'Das reguläre Ausdrucksmuster I: \ Ebooks und PDFs ist nicht gültig. Bei Zeile: 1 Zeichen: 65 + ... t -u | % {cp $ _ $ ($ _ -replace 'I: \ Ebooks und PDFs', 'I: \ Audiobooks')} + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (I: \ Ebooks und PDFs: String) [], RuntimeException + FullyQualifiedErrorId: InvalidRegularExpression'. Wissen Sie, was die Ausnahme auslöst? –

+0

anstelle von '$ ($ _ -replace ...)' '' '' _. Ersetze (a, b) '. Siehe bearbeitete Antwort. – majkinetor

+0

Das hat gut funktioniert, aber als ich cp durch mv ersetzt habe (ich habe -force hinzugefügt, da die Verzeichnisse jetzt bereits gefüllt sind), wurde mir ein Element nicht erlaubt, weil das ursprüngliche Verzeichnis in Benutzung ist. Ich habe alle möglichen Programme geschlossen, die das Verzeichnis verwenden, und erhalte immer noch die Ausnahme. Gibt es ein mögliches Syntaxproblem oder können Sie einen Grund dafür sehen? –

Verwandte Themen