Wie benennt man eine Reihe von Verzeichnissen in Windows um?

513
user648026

Ich möchte den Verzeichnisnamen von ändern

view_pictures personal_pictures scenic_pictures 

zu

2017_view_pictures 2017_personal_pictures 2017_scenic_pictures 

Jeder Ordner enthält Dateien, und dies ist nur ein fiktives Beispiel. Im Quellverzeichnis befinden sich mehr als 20 KB Unterverzeichnisse, so dass ein manuelles Umbenennen nicht möglich ist.
Ich habe versucht, die Liste mit immer Baum Befehl,
also kann ich die Liste mit Notepad ++ und einige regex manipulieren,
aber Baum wird nicht vollständigen Pfad geben, damit ich einen Befehl erzeugen kann.

Dies ist die Verzeichnisstruktur:

root path picsfromA view_pictures personal_pictures picsfromB view_pictures personal_pictures scenic_pictures picsfromC personal_pictures scenic_pictures picsfromD personal_pictures picsfromN scenic_pictures 

Dies ist die gewünschte Verzeichnisstruktur:

root path picsfromA 2017_view_pictures 2017_personal_pictures picsfromB 2017_view_pictures 2017_personal_pictures 2017_scenic_pictures picsfromC 2017_personal_pictures 2017_scenic_pictures picsfromD 2017_personal_pictures picsfromN 2017_scenic_pictures 

UPDATE
Ich versuche es auch so:
Der schwierige Teil besteht darin, die Pfadzeichenfolge zu brechen und sie zu rekonstruieren.

@echo off SETLOCAL set folder_path=%%f for /D /r %%f in (*) do ( set folder_path=%%f echo %folder_path%  if "%folder_path:~-13%" EQU "view_pictures" ( REM path without last folder name REM construct path without folder name REM [ren old folder], [new folder.] )  ) 
2
Sie sollten einen Blick auf Bulk Rename Utility - http://www.bulkrenameutility.co.uk/Main_Intro.php werfen Anaksunaman vor 6 Jahren 1
Die Dinge wären viel einfacher, wenn Sie WSL unter Windows 10 haben (falls vorhanden). iBug vor 6 Jahren 1
@iBug Es ist nur einfacher, wenn du Batch nicht kennst, aber bash ;-) LotPings vor 6 Jahren 1
Ich mag RegexRenamer wirklich sehr Cole Johnson vor 6 Jahren 1

2 Antworten auf die Frage

1
LotPings

for /D /r %%f in (*) do ( ist eine ungültige Kombination, siehe Ausgabe mit einem Echo.

  • Sie könnten zwei stapeln for /D, um zuerst die picsfrom..und dann die Unterordner oder zu durchlaufen
  • Eine for /fParsing-Ausgabe, die mit einem regulären Ausdruck ($ -Anker am Ende) gefiltert wurde, um nur gewünschte Unterordner mit einem Suchstring abzugleichen:

@Echo off Set "Folders=view_pictures$ personal_pictures$ scenic_pictures$"  For /f "delims=" %%F in ( 'Dir /B/S/AD ^|Findstr /I "%Folders%"' ) Do Ren "%%~fF" "2017_%%~nxF" 

Musterbaum auf meinem RAM-Drive A:

> tree A:\ └───root path ├───picsfromA │ ├───2017_personal_pictures │ └───2017_view_pictures ├───picsfromB │ ├───2017_personal_pictures │ ├───2017_scenic_pictures │ └───2017_view_pictures ├───picsfromC │ ├───2017_personal_pictures │ └───2017_scenic_pictures ├───picsfromD │ └───2017_personal_pictures └───picsfromN └───2017_scenic_pictures 

BEARBEITEN Ausgabe von for /D /r %%A in (*) do Echo:%%Aauf meinem System

A:\root path\picsfromA A:\root path\picsfromB A:\root path\picsfromC A:\root path\picsfromD A:\root path\picsfromN A:\root path\picsfromA\2017_personal_pictures:A:\root path\picsfromN A:\root path\picsfromA\2017_view_pictures:A:\root path\picsfromN A:\root path\picsfromB\2017_personal_pictures:A:\root path\picsfromN A:\root path\picsfromB\2017_scenic_pictures:A:\root path\picsfromN A:\root path\picsfromB\2017_view_pictures:A:\root path\picsfromN A:\root path\picsfromC\2017_personal_pictures:A:\root path\picsfromN A:\root path\picsfromC\2017_scenic_pictures:A:\root path\picsfromN A:\root path\picsfromD\2017_personal_pictures:A:\root path\picsfromN A:\root path\picsfromN\2017_scenic_pictures:A:\root path\picsfromN 
Ihre FOR / F-Lösung ist in Ordnung. Bei FOR / D / R %% F in (*) DO ... `ist jedoch nichts auszusetzen. Es funktioniert perfekt. dbenham vor 6 Jahren 0
@dbenham Ich bekomme zwei Pfade (Fullpath und Root Path), die mit einem Doppelpunkt mit diesem Befehl für Unterordner voneinander getrennt sind, so dass sie möglicherweise gültig sind, aber unerwartete Ergebnisse ergeben. LotPings vor 6 Jahren 0
Ich verstehe Ihre Beschreibung der FOR / R / D-Ausgabe nicht. Auf meinem Computer erhalte ich die erwartete rekursive Auflistung des vollständigen Pfads jedes untergeordneten Ordners unter dem Stammverzeichnis. Ich habe dieses Konstrukt seit Jahren erfolgreich eingesetzt. dbenham vor 6 Jahren 0
@dbenham An meine Antwort wurde die Ausgabe des Befehls angehängt. LotPings vor 6 Jahren 0
Was zum Teufel ist das funky @! **% ??? Ich kann mir nicht vorstellen, was dieses Ergebnis auf Ihrem Computer verursacht. Ich habe sicher noch nie so etwas gesehen. Ich würde gerne ein besseres Verständnis bekommen. Sie können diese Ausgabe unter http://www.dostips.com/forum als Thema veröffentlichen. Es ist ein guter Ort für kollaborative Ermittlungen. dbenham vor 6 Jahren 0
1
dbenham

Hier ist eine funktionierende Lösung, die FOR / D / R verwendet

@echo off for /d /r %%F in (*) do ( if /i "%%~nxF" == "view_pictures" ren "%%F" "2017_%%~nxF" if /i "%%~nxF" == "personal_pictures" ren "%%F" "2017_%%~nxF" if /i "%%~nxF" == "scenic_pictures" ren "%%F" "2017_%%~nxF" ) 

Oder vereinfacht mit einer zusätzlichen Schleife

@echo off for /d /r %%F in (*) do for %%A in (view personal scenic) do ( if /i "%%~nxF" == "%%A_pictures" ren "%%F" "2017_%%~nxF" ) 

Oder Sie können die FOR / F-Lösung verwenden, die LotPings veröffentlicht hat.

Sie können auch mein JREN.BAT-Dienstprogramm zum Umbenennen von regulären Ausdrücken verwenden . JREN ist ein reines Skript (Hybrid-JScript / Batch), das nativ auf jedem Windows-Computer ab XP ausgeführt wird - es ist keine Drittanbieter-Exe-Datei erforderlich.

jren "^" "2017_" /s /d /fm "scenic_pictures|personal_pictures|view_pictures" 
rettete meinen Tag, tolle, elegante Lösung, danke! user648026 vor 6 Jahren 0