2016-11-01 3 views
0

Sagen wir, ich habe eine Liste von potenziellen Verzeichnisnamen, die ich ändern möchte. Es gibt keine spezielle Regel, es ist nur eine Frage von "Wechsel von einer alten Liste von Namen" zu "einer neuen Liste von Namen"Batch umbenennen in Windows nach externer Liste

Zum Beispiel möchte ich: - das Verzeichnis "A" (wenn es existiert) in "LEA" umbenannt werden - das Verzeichnis "ON" (wenn es existiert) in "ONS" umbenannt werden - etc ..., dies für eine Liste von ~ 100 möglichen Namen.

(andere Verzeichnisse und Dateien natürlich unberührt).

Ich möchte es zu einem Batch machen, da dies auf vielen verschiedenen Computern durchgeführt werden muss.

Was wäre Ihrer Meinung nach der beste Ansatz dafür? Die Verwendung von Windows Batch/Powershell ist in Ordnung. Sie können erwägen, die Namensliste in einer externen TXT-Datei zu speichern.

+1

youir Datei Zeile für Zeile lesen und umbenennen ('ren /?'). Umleitung möglicher Fehler ("existiert nicht") zu nul ('2> nul') – Stephan

+0

Wenn Sie das Format der Eingabedatei kontrollieren können, anstatt die externe Textdatei mit hundert Zeilen' old1, new1' zu versehen, müssen sie enthalten sein hundert Zeilen von 'move old1 new1'. Und speichern Sie es als .bat anstelle von .txt. Suchen und ersetzen Sie einmal in einem halben anständigen Texteditor wird es – TessellatingHeckler

Antwort

1

würde ein einfacher Batch-Skript, um es tun:

for /f "tokens=1,2 delims=/" %%i in (input.txt) do move "%%i" "%%j" 

oder wenn Sie Meldungen über fehlende Verzeichnisfehler

for /f "tokens=1,2 delims=/" %%i in (input.txt) do if exist "%%i" (move "%%i" "%%j") 

Das Doppel %% für die Flucht in einem Batch-Skript. Wenn Sie nur diese auf der Kommandozeile in eingeben, müssen Sie nur %

Eingabe.txt sollte wie etwas enthalten

A/LEA 
ON/ONS 

Verwendung von/(zum Beispiel) als Trennzeichen in „delims=/“ Sie können haben Leerzeichen in den Verzeichnisnamen. Wenn Sie keine Leerzeichen haben, können Sie das auslassen und Leerzeichen und Tabs als Standardtrennzeichen fungieren.

+0

Sie sind mein Gott. Vielen Dank ! :) –

+1

Gern geschehen. –

+0

Was ist, wenn ich angeben möchte, dass dies in einem anderen Ordner als dem geschieht, von dem ich das Skript ausführe? Ich habe versucht 'set picdir =" D: \ irgendein Pfad mit Leerzeichen \ test \ " für/f" Tokens = 1,2 delims =/"%% i in (set_names.txt), wenn vorhanden" %% picdir %% i "(move" %% picdir %% i "" %% picdir %% j ")' –

0

eine CSV-Datei

Inhalt dieser CSV-Datei mit dem Namen verwenden:

oldnamedir;newnamedir 
data;newdata 
data2;newdata2 

ein Skript Powershell tun: (? `Für /`)

$mycsv=import-csv -Delimiter ";" -Path "c:\temp\myfilewithreplace.csv" 
    $startdir="C:\dir_where_you_want_rename_dirs" 

    foreach ($row in $mycsv) 
    { 
    $listdirtorename= gci -Path $startdir -Directory -Recurse | where { ($_.FullName -split "\\" | select -last 1) -eq ($row.oldnamedir) } | select Name, FullName, @{N="LenghtName";E={($_.FullName -split "\\").Count}} | sort LenghtName -Descending 

     foreach ($dir in $listdirtorename) 
     { 
     rename-item -Path $dir.FullName -NewName $row.newnamedir -Force 
     } 
    } 
Verwandte Themen