Probleme beim Hinzufügen eines Präfixes zu Bulk-Dateinamen mithilfe einer Batchdatei

2673
Hannibal83

Ich versuche, allen Dateinamen in einem Ordner ein Präfix hinzuzufügen.

Nach ein paar Tagen im Internet suchte ich tatsächlich etwas, das fast perfekt funktioniert:

echo Please specify fileprefix echo Your Choise?? set /p pre= ^ for %%i in (*.txt) do ren %%i "%pre%"%%i 

Das Problem ist, dass, wenn das Präfix mit einem Zeichen beginnt, das alphabetisch nach dem ersten Zeichen des Dateinamens steht, die erste Datei zweimal umbenannt wird.

Hier ist die Ausgabe beim Versuch, die drei Dateien umzubenennen 1.txt, 2.txtund 3.txt im Testordner:

Your Choise?? pre  D:\rntest>ren 1.txt "pre"1.txt  D:\rntest>ren 2.txt "pre"2.txt  D:\rntest>ren 3.txt "pre"3.txt  D:\rntest>ren pre1.txt "pre"pre1.txt 

Und ließ mich mit den drei Dateien pre2.txt, pre3.txtundprepre1.txt

Das Problem scheint zu sein, dass die ersten Dateien während des Vorgangs automatisch in alphabetischer Reihenfolge sortiert werden. Die erste Datei wird daher nach unten verschoben und daher erneut verarbeitet. Ich habe jedoch keine Ahnung, ob dies tatsächlich der Fall ist.

Ich habe versucht, mit einem Debugging herumzuspielen, um die Datei nach dem ersten Umbenennen erneut umzubenennen.

Hier ist der Code

for %%i in ("%pre%""%pre%"*) do ren %%i %%i:~3% 

Dies scheint den korrekten Dateinamen (das doppelte Präfix) zu identifizieren, macht aber nichts damit (Dateiname existiert nicht oder es gibt bereits einen identischen Dateinamen). Es sollte die ersten drei Zeichen des Dateinamens entfernen, um das korrekte Ergebnis zu erhalten.

Ich dachte nur, dass es einen besseren / einfacheren Weg geben muss, um dies zu tun, ohne Fehler überprüfen und korrigieren zu müssen.

0
Zumindest haben Sie diese Frage nicht mit "ms-dos" markiert :) Willkommen bei Stack Exchange und SuperUser. a CVn vor 9 Jahren 0
Eine einfache Lösung wäre, den Ordner vorzuverarbeiten und ein Array von Dateien zu erstellen, die umbenannt werden sollen. Danach können Sie das Array umbenennen und die Dateien umbenennen. Andernfalls arbeiten Sie mit einem Änderungssatz. Ich kann nicht testen [dieser Vorschlag] (http://stackoverflow.com/a/19542051/1584762) (auf dem Handy), aber es sieht so aus, als sollten Sie es leicht annehmen können. nerdwaller vor 9 Jahren 0

2 Antworten auf die Frage

1
Alex

EDIT: Ähnlich, was Nerdwaller kommentierte

Sie können den dirBefehl in einer for /fSchleife verwenden, um das erwartete Verhalten wie folgt zu erreichen:

@echo off echo Please specify fileprefix echo Your Choise?? set /p pre= for /f "tokens=1* delims=" %%i in ('dir /b /o:-n /a:-d *.txt') do ren "%%i" "%pre%%%i" 

dir Befehlsschalter erklärt:

/b - Uses bare format (no heading information or summary). /o:-n - Sort backwards (helps when you have file named similar names like 1.txt and 11.txt) /a:-d - Don't give any directories (give files only) 
Vielen Dank, das hat wie ein Zauber funktioniert :) und ich verstehe fast den ganzen Code: D Hannibal83 vor 9 Jahren 0
1
PatrickOfLondon

Ich habe ein sehr leistungsfähiges kostenloses Dienstprogramm namens " Bulk Rename Utility" zum Ändern von Windows-Dateinamen gefunden.

Es funktioniert sehr gut und ich habe etwas Geld über PayPal gespendet;