Batchdatei zum Ersetzen von "." durch "-"

Batchdatei zum Ersetzen von "." durch "-"

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 /enabledelayedexpansionreicht 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:ONSchalter ö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"

verwandte Informationen