Windows-Batchdatei zum Verschieben von Dateien in Unterordner basierend auf dem ersten Wort im Dateinamen?

1289
juzzle

Ich bin ein bisschen Batch-File Noob, also würde ich Ihre Hilfe wirklich schätzen. Ich habe eine Menge Dateien in einem einzigen Verzeichnis gespeichert, die ich basierend auf dem ersten Wort in ihren Dateinamen in Unterordner sortieren möchte. Ich habe also Dateien wie diese:

C:\Folder\Wedding2018 img20929.jpg  C:\Folder\Wedding2018 entrance.mov C:\Folder\Wedding2018 registry of guests.pdf  C:\Folder\HorseRiding2017 spirit1.jpg C:\Folder\HorseRiding2017 guests.txt  C:\Folder\HorseRiding2017 certificate.pdf C:\Folder\HorseRiding2017 jumping.mov 

Und ich möchte alle Dateien basierend auf dem ersten Wort in Unterordner verschieben und am Ende so enden:

C:\Folder\Wedding2018\img20929.jpg C:\Folder\Wedding2018\entrance.mov C:\Folder\Wedding2018\registry of guests.pdf  C:\Folder\HorseRiding2017\spirit1.jpg C:\Folder\HorseRiding2017\guests.txt C:\Folder\HorseRiding2017\certificate.pdf C:\Folder\HorseRiding2017\jumping.mov 

Ich habe ein paar Skripte gefunden, die fast das tun, was ich brauche, aber ich habe nicht die Mühe, es nach Hause zu bringen:

"Sie benötigen ein Skript, um Ordner basierend auf Dateinamen zu erstellen und Dateien automatisch zu verschieben"

"So extrahieren Sie das zweite Wort der Zeichenfolge mit Windows Batch"

Ich kann einfach nicht herausfinden, wie man das Skript integriert, um das erste Wort zu packen und ein Verzeichnis zu erstellen, in das die Dateien verschoben werden.

Kannst du mir helfen, dies auf die ganze Linie zu bringen?

1

2 Antworten auf die Frage

1
LotPings
  • Verwenden Sie eine, um den Ordnerinhalt %%Amit einem Muster zu durchlaufen, das mindestens ein Leerzeichen enthält.
  • Ein anderer for /fwird benötigt, um den Namen %%Ain zwei Teile aufzuteilen, einen vor dem ersten Leerzeichen tokens=1= %%Bund den Rest tokens *= %%C.
  • Wenn ein Ordner mit dem Namen %%Bnicht existiert, erstellen Sie ihn
  • Verschieben Sie die Originaldatei %%Ain den Unterordner %%Bmit dem Namen%%C

:: Q:\2018\06\11\SU_1330475.cmd @Echo off PushD C:\folder for %%A in ("* *.*") do for /f "tokens=1*" %%B in ("%%A") do ( If not exist "%%B" MD "%%B" Move "%%A" "%%B\%%C" ) PopD 

> tree /f C:. │ SU_1330475.cmd │ └───folder ├───HorseRiding2017 │ certificate.pdf │ guests.txt │ jumping.mov │ spirit1.jpg │ └───Wedding2018 entrance.mov img20929.jpg registry of guests.pdf 
das hat wie ein absoluter Charme funktioniert - danke. Beim Testen mit einer großen Anzahl von Dateien war der einzige Schluckauf, den ich feststellte, dass für Dateien mit doppeltem Speicherplatz nach dem ersten Wort sie überhaupt nicht gehandhabt werden konnten - leicht behoben juzzle vor 6 Jahren 0
Wenn Sie meine Antwort als nützlich erachten, sollten Sie die Chack-Markierung als Antwort und / oder [hoch bewerten] betrachten (https://superuser.com/help/why-vote). LotPings vor 6 Jahren 0
-1
Ricardo Bohner

Muss es eine Batchdatei sein?

Ich würde den Hauptordner öffnen, in dem sich alle Dateien und Unterordner befinden. Als nächstes gehen Sie zum Suchfeld in diesem Fenster und geben beispielsweise wedding * ein. Sie wählen alle Dateien aus, indem Sie STRG + A drücken, und dann drücken Sie STRG + X, um zu schneiden.

Sie erstellen einen neuen Ordner mit dem Namen Wedding2018 und drücken Sie STRG + V (Einfügen). Sie tun also für jeden Ordner, den Sie möchten.