Wie kann ich einen Ordner in Windows 7 reduzieren, wenn alle Dateinamen unterschiedlich sind?


19

Angenommen, ich habe die folgende Ordnerhierarchie:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Ich möchte einen Befehl ausführen, der Folgendes bewirkt:

Folder1
   File1
   File2
   File3
   File4

oder etwas ähnliches. Ich bin nicht sehr vertraut mit Windows, daher würde ich mich über möglichst viele Details in der Antwort freuen.


Suchen Sie ein vorhandenes Programm, das dies für Sie erledigt, oder einen Code (welche Programmiersprache), der dies erledigt?
Matt Ball

@MattBall: Ich suche nach dem einfachsten Weg, dies zu tun. Idealerweise würde dies ein Terminal öffnen und einen Befehl eingeben. Auch hier bin ich nicht sehr erfahren mit Windows. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt. Vielen Dank.

Antworten:


32

Am einfachsten ist es, den gemeinsamen Stammordner einzugeben und nach allen Dateien zu suchen (dh nach * zu suchen). Wenn alle Dateien gefunden wurden, markieren Sie alle Dateien, drücken Sie Strg + X und navigieren Sie erneut zum gemeinsamen Stammordner. Drücken Sie nun Strg + V, um alle Dateien in den Stammordner einzufügen. Wenn Sie fertig sind, löschen Sie alle Unterverzeichnisse.

Ich weiß nicht, ob dies als Batch-Job durchgeführt werden kann.


1
Ich mag die Einfachheit, aber ich habe es mit 40k-Dateien versucht und es hat den Explorer-Prozess zum Absturz gebracht.
UpTheCreek

Die Antwort des totalen Kommandanten scheint mir einfacher zu sein.
Ev0oD

13

Ich habe diesen Powershell-Ansatz letztendlich verwendet, als ich eine große hierarchische Struktur abflachen musste (in meinem Fall pngs):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\

Zum Abflachen ist Move-Item vielleicht besser geeignet?
geisterfurz007 Stoppt dieses Chaos

4

windows exe: http://en.sourceforge.jp/projects/sfnet_flatfolder/

oder AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

oder verwenden Sie Directory Opus

oder Powershell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

oder Charge (wie oben erwähnt)

oder die manuelle Suche, Ausschneiden und Einfügen wie oben erwähnt

Es gibt viele Möglichkeiten, abhängig von Ihren Fähigkeiten und Neigungen, eine davon auszuwählen und entsprechend Ihren Bedürfnissen zu verfeinern.

Möglicherweise benötigen Sie diese Option, um leere Verzeichnisse nach dem obigen Vorgang zu entfernen


1
Powershell-Befehl ist kurz und funktioniert gut
Maxim Yefremov

3

Wenn Sie dir nur von Zeit zu Zeit manuell reduzieren müssen, ist Total Commander perfekt.

In Total Commander: Gehen Sie zu Ihrem Verzeichnis, das Sie reduzieren möchten. Klicken Sie im Menü auf Befehle> Verzweigungsansicht . Und wenn Sie alles abgeflacht sehen, können Sie es in einen anderen Ordner verschieben / kopieren.

Wenn Sie ein bisschen mit Dateinamen basteln müssen: Wählen Sie alle Dateien in der reduzierten Ansicht aus, und klicken Sie im Menü auf " Dateien"> "Mehrfach umbenennen" . Hier können Sie mit "Rename mask" einige Informationen vom Pfad zu den tatsächlichen Dateinamen hinzufügen. Sie müssen lediglich das Plugin-Tag / die Schaltfläche, die Such- und Ersetzungsfunktion und die kleine Schaltfläche "Foolder" verwenden, mit der Sie einige letzte Änderungen an Dateinamen vornehmen können Texteditor. Klingt vielleicht kompliziert, ist aber der einfachste Weg, IMO :)


Was ist Windows Commander? Meinen Sie Total Commander?
UpTheCreek

Genau :) Ich benutze es seit 10 Jahren und hieß damals Windows Commander. Herausgegeben out
teejay

Vielen Dank. Einfach mal probiert. Für 40k kleine Dateien würde es allerdings nicht funktionieren :( verbrauchte 10 Minuten lang viel CPU und kam dann mit wiederholten Fehlern "Datei konnte nicht erstellt werden".
UpTheCreek

CPU-Auslastung und angedeutete Langsamkeit sind bedauerlich, aber verständlich :) Der Fehler ist etwas anderes. Möglicherweise eine falsche Benennung, ein Total Commander Bug oder einfach die Unfähigkeit von TC, mit so vielen Dateien umzugehen. Ich würde versuchen, zuerst eine kleinere Anzahl von Dateien
umzubenennen

@teejay, ich musste nach den Details Ihres Vorschlags fischen, aber ich habe es endlich geschafft, es zu machen. Ich habe das Plugin expander2 verwendet, um Teile des Pfades zu extrahieren und ihnen das Präfix des Dateinamens zu geben. Vielleicht möchten Sie einige Details für den nächsten Mann hinzufügen. Tx.
Killogre

3

Ziemlich einfach mit einer Befehlszeilenoption für diejenigen, die nicht besonders technisch veranlagt sind.

  1. Erstellen Sie eine Datei mit dem Namen "flatten.cmd"
  2. Öffnen Sie diese Datei im Editor
  3. Fügen Sie in die Datei Folgendes ein:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Ersetzen Sie "{SourcePath}" durch den Ordner, den Sie reduzieren möchten. In Ihrem Fall "c: \ Folder1"

  5. Ersetzen Sie "{Ziel"} durch den Ordner, in den die Dateien verschoben werden sollen. In deinem Fall auch "c: \ Folder1". Der Code sollte nun so aussehen:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Öffnen Sie ein Befehlszeilenfenster. Das kann man auf verschiedene Arten machen, aber das geht schnell:

    • Klicken Sie auf die Schaltfläche Start
    • Klicken Sie auf Alle Programme
    • Klicken Sie auf Zubehör
    • Klicken Sie auf Eingabeaufforderung
  7. Geben Sie im Befehlszeilenfenster Folgendes ein:

    cd {folder where you put the flatten.cmd file}
    flatten
    

Und das wird es tun (Windows 8+) Ich habe das gerade getan, um einen Ordner mit 10.000 Musikdateien zu verkleinern. Klappt wunderbar.

Sie finden die Optionen für das FOR-Befehlszeilendienstprogramm unter https://technet.microsoft.com/en-us/library/bb490909.aspx .


1

mit einem Batch-Skript (aus dem Kopf):

Schlagen Sie den Befehl FOR nach

In der ersten Zeile werden alle Dateien aus den Unterverzeichnissen in das Stammverzeichnis verschoben. In der zweiten Zeile werden die Unterordner gelöscht

for /f %f in ('dir "c:\folder\*" /s/b/a-d') do if not %~ff"=="c:\folder" move "%f" "c:\folder"
for /f %f in ('dir "c:\folder\*" /s/b/ad') do if not "%~ff"=="c:\folder" rd /s/q "%f" 

Muss ich ein Terminal öffnen und diese Befehle eingeben, um sicherzustellen, dass ich "Ordner" durch den entsprechenden Pfad ersetze? Vielen Dank.

Wenn Sie es nicht in einem Skript schreiben möchten, ja. OTOH .....
Preet Sangha

Kann dies verallgemeinert und an eine Kontextmenüaktion angehängt werden? Ich würde gerne in der Lage sein, mit der rechten Maustaste auf eine Datei zu klicken, auf "Datei reduzieren" zu klicken und dann alle darin enthaltenen Dateien auf die Ordnerebene zu verschieben. Das Löschen des Ordners nach wäre auch schön.
MAW74656

Ja, es kann in eine Batch-Datei mit% 1 als Ordnernamen geschrieben werden. stackoverflow.com/questions/6162415/…
Preet Sangha

- Möglicherweise können Sie mit diesem Superuser
q

1

Hallo, Sie können auch das Tool xxcopy (www.xxcopy.com) verwenden, das xcopy für Sterioden (sozusagen). Mit diesem Tool können Sie die Dateien in Ordnern in einem Ordner "reduzieren".

c:> xxcopy / source-folders / flatten / SG

Lesen Sie einfach diesen Link: http://www.xxcopy.com/xxcopy16.htm

Prost.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.