2016-08-16 1 views
0

Meine aktuelle Ordnerstruktur sieht wie folgt aus:Verschieben spezifische Erweiterung auf eine Verzeichnisebene

E:\Videos\Movies\Random Folder Name\Subs\Random File Name.srt 

Ich möchte meine .srt Dateien eine Ebene nach oben bewegen, so heißt es:

E:\Videos\Movies\Random Folder Name\Random File Name.srt 

Ich würde es vorziehen Dies ist eine .bat Datei, aber ich bin bereit, PowerShell zu verwenden.

~ EDIT ~

ich etwas online zu finden, die teilweise funktioniert und bearbeitet es auf meine Bedürfnisse:

@echo off 
set thisdir=%cd% 
for /f "delims=" %%A in ('dir /b /ad') do (
    cd /d "%%~dpnA" 
    for /f "delims=" %%B in ('dir /b /ad') do (
     echo Level 2 Directory: %%~dpnB 
     cd /d "%%~dpnB" 
     for /f "delims=" %%C in ('dir /b /ad') do (
      echo Level 3 Directory: %%~dpnC 
      cd /d "%%~dpnC" 
      move *.srt ..\ 
      cd.. 
      rd "%%~dpnC" 
     ) 
    ) 
) 

Dies funktioniert, aber nur für den ersten Ordner, kann ich nicht scheinen Ebene zu machen 2 rekursiv wie das ist die Ebene mit zufälligen Filmnamen. Ich habe versucht, ersetzen für/f mit for/r, aber es war ein Nein.

Antwort

0

Obwohl die Antworten schon gegeben Arbeit, ich wollte immer noch versuchen, herauszufinden, wie Sie den Code genau meine Bedürfnisse perfekt. Konnte nicht mit CMD erreichen dies, so sah ich in Powershell (was einfacher war für mich aus irgendeinem Grund zu erfassen) diese und codiert:

$sourcefolder = "F:\Videos\Movies\*\Subs\" 

$files = Get-ChildItem -Recurse $sourcefolder | where {$_.PSIScontainer -eq $false} 
foreach ($file in $files) 
{ 
    $destinationFolder = Split-Path -Parent $file.Directory.FullName 
    move-item $file.FullName $destinationFolder 
} 

Es ist nicht srt Dateien nicht angeben, aber sie sind die einzige Erweiterung in diesem Ordner. Danke für die Hilfe Jungs!

1

Voll Code (Sie können dies von einem beliebigen Laufwerk laufen jetzt):

@echo off 
cd /d E:\Videos\Movies\ 
for /r %%i in (*.srt) do move "%%~dpnxi" "%%~dpi.." 
pause 

Das sieht für alle Dateien mit Typ .srt und move s sie in den Ordner, in -1-Verzeichnis gefunden wurde (%%~dpi ist die Verzeichnis, in dem es gefunden wurde, das Hinzufügen von .. zu einem Pfad entfernt das letzte Verzeichnis, also C:\Users\.. würde Sie auf C:\ setzen).
PS: Diesmal habe ich das getestet, und es funktioniert.

+0

Ich gebe dies einen Test, wenn ich nach Hause komme, aber das Verzeichnis "Random Folder Name" ist buchstäblich zufällig. Diese Ebene enthält Ordner, die nach Filmen benannt sind. Ich erwähne nur, dass es offensichtlich nicht funktionieren würde, wenn man sich diesen Code anschaut. – Failstyle

+0

Ah, okay. Dies wird eine einfache Lösung sein. –

+0

1. Ich habe andere Videos auf meinem E: \ Laufwerk, die Untertitel haben, so brauche ich es, um den Pfad, den ich in OP gegeben, wo dieses Skript scheint zu greifen ANY/ALL .srt Dateien in allen Ordnern ein:. 2. Ihr Code verschiebt die .srt-Dateien nicht nur um eine Ebene nach oben, sondern zieht sie dorthin, wo auch immer die Bat-Datei ausgeführt wird, egal wie tief die Ordnerstruktur ist. – Failstyle

2

Hier ist ein Einzeiler:

forfiles /m *.srt /s /c "cmd /c move @file .." 
+0

Dies funktioniert perfekt, aber ich habe andere srt-Dateien auf einer anderen Ebene und dies bewegt sie nach oben, wenn sie eigentlich in Ordnung sind, wo sie sind. Trotzdem danke! – Failstyle

+0

Wenn ich zurückblicke, hätte ich es benutzen und die 100 Dateien behandeln können, die von Hand falsch bewegt werden. Danke nochmal dafür! – Failstyle

Verwandte Themen