Ich muss die Dateierweiterungen beibehalten und es muss durch die Unterordner funktionieren.
Beispiel: „File.name.ext“ sollte zu „File-name.ext“ werden.
Ich habe überhaupt keine Ahnung von Shell-Skripten, also seien Sie in Ihrer Antwort bitte ausführlich. Ich habe keine Ahnung, was die Schalter bedeuten oder wie man überhaupt den Pfad angibt.
Antwort1
Ich stimme der anderen Antwort eigentlich vollkommen zu. Ein GUI-Massenumbenennungsprogramm wäreAlsoviel einfacher zu verwenden. Allerdings habe ich nur zum Spaß die folgende Batchdatei geschrieben, die alle Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen rekursiv umbenennen und . durch - ersetzen soll (also zum Beispiel "Lange .Datei. .Name.Erweiterung" wird werden "Lang -Datei- -Name.ext"):
@echo off
setlocal enabledelayedexpansion
for /r %%f in (*.*) do (
set fn=%%~nf
REM Remove the echo from the following line to perform the actual renaming!
if not [!fn!]==[] if not ["%%~nxf"]==["!fn:.=-!%%~xf"] echo ren "%%~f" "!fn:.=-!%%~xf"
)
pause
Führen Sie die Batchdatei einmal aus. Wenn Sie mit der Ausgabe zufrieden sind, führen Sie die eigentliche Umbenennung durch, indem Sie das Wort entfernen echo
(zweite Instanz, nicht aus der ersten Zeile) und die Datei erneut ausführen.
Antwort2
Ich verstehe irgendwie nicht, warum Sie sich dann mit einer Batchdatei herumschlagen wollen. Warum verwenden Sie nicht eines der unzähligen GUI-Umbenennungstools wie:
http://www.beroux.com/english/softwares/renameit/
Wenn Ihnen das nicht zusagt, schauen Sie sich diese Parade an:
http://www.techsupportalert.com/best-free-rename-utility.htm
Antwort3
Hier ist meine endgültige, getestete Version einer Batchdatei, die alles kann, was Sie wollen. Sie funktioniert mit Dateien mit und ohne Dateinamen oder Erweiterungen, jedoch Dateien mit Dateinamen, die enthalten %
oder !
werdenÄrger verursachen.
Es verwendet verzögerte Erweiterung, daher müssen Sie es von einer Eingabeaufforderung aus mit aktivierter verzögerter Erweiterung ausführen (einfaches Ausführen setlocal /enabledelayedexpansion
reicht nicht aus, da es dadurch nur umgeschaltet wirdwenn es bereits aktiviert ist; es hat keine Wirkung, wenn es beim Ausführen der Eingabeaufforderung nicht aktiviert ist).
Sie können die verzögerte Erweiterung aktivieren, indem Sie die Eingabeaufforderung mit dem /V:ON
Schalter öffnen. Sie können dies jedoch auch von einer vorhandenen Eingabeaufforderung aus tun, wie in der folgenden Batchdatei.
@echo off
:: This batch file (prints the command to) rename files so that
:: any dots (.) are replaced with dashes (-)
::
:: Note, files with names containing percents (%) and exclamantions (!)
:: will intefere with command-prompt syntax and are not supported, but
:: can be worked around: https://stackoverflow.com/questions/5226793/
:: If this batch-file has no parameters...
if [%1]==[] (
:: Open a new command-prompt with delayed-expansion enabled and call self
cmd /v:on /c "%0" +
:: Quit
goto :eof
)
:: Recurse through all files in all subdirectories
for /r %%i in (*) do (
rem (:: cannot be used for comments in a FOR loop)
rem Check if it has an extension
if [%%~xi]==[] (
rem If it has an extension, preserve it
set RENFN=%%~nxi
) else (
rem Copy the path (and filename)
set RENFN=%%~ni
rem Check if it has a filename
if not [%%~ni]==[] (
rem If it has a filename, replace dots with dashes
set RENFN=!RENFN:.=-!
)
)
rem Rename original file
ren "%%i" "!RENFN!%%~xi"
)
:: Exit spawned shell (no need to use setlocal to wipe out the envvar)
exit
:: Test output:
::
:: C:\t> dir /b/a
::
:: .txt
:: blah
:: file.blah.txt
:: foo.bar.txt
:: super duper. .blah.ttt. omergerd.---.mp4
:: t.bat
::
:: C:\t> t.bat
::
:: ren "C:\t\.txt" ".txt"
:: ren "C:\t\blah" "blah"
:: ren "C:\t\file.blah.txt" "file-blah.txt"
:: ren "C:\t\foo.bar.txt" "foo-bar.txt"
:: ren "C:\t\super duper. .blah.ttt. omergerd.---.mp4" "super duper- -blah-ttt- omergerd----.mp4"
:: ren "C:\t\t.bat" "t.bat"