Пакетный файл для замены "." на "-"

Пакетный файл для замены "." на "-"

Мне нужно сохранить расширения файлов, и это должно работать через подпапки.

Например: «File.name.ext» должно стать «File-name.ext»

Я полный новичок в скриптах оболочки, поэтому, пожалуйста, будьте подробны в своем ответе. Я понятия не имею, что означают все эти переключатели или даже как указать путь для этого.

решение1

Я полностью согласен с другим ответом на самом деле. Утилита массового переименования GUI была бытакгораздо проще в использовании. Однако, просто ради забавы я написал следующий пакетный файл, который должен рекурсивно переименовать все файлы в текущем каталоге и подкаталогах и заменить . на - (например, "Длинный .файл. .имя.расширение" станет "Длинный -файл- -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

Запустите пакетный файл один раз, затем, если вывод покажется удовлетворительным, выполните фактическое переименование, удалив слово echo(второй экземпляр, а не из первой строки) и повторно запустив файл.

решение2

Я как-то не понимаю, зачем вам тогда возиться с пакетным файлом. Почему бы вам не воспользоваться одним из миллиарда инструментов переименования с графическим интерфейсом, например:

http://www.beroux.com/english/softwares/renameit/

Если этот конкретный вариант вам не по душе, посмотрите на этот парад:

http://www.techsupportalert.com/best-free-rename-utility.htm

решение3

Вот моя окончательная, проверенная версия пакетного файла, который может делать то, что вы хотите. Он работает с файлами с именами файлов и расширениями и без них, однако файлы с именами файлов, содержащими %или !будутвызвать проблемы.

Он использует отложенное расширение, поэтому его необходимо запустить из командной строки с включенным отложенным расширением (простой запуск setlocal /enabledelayedexpansionне поможет, так как это только переключает его).если он уже включен; он не будет иметь никакого эффекта, если он не включен при запуске командной строки).

Вы можете включить отложенное расширение, открыв командную строку с помощью переключателя /V:ON, но вы также можете сделать это из существующей командной строки, как в пакетном файле ниже.

@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"

Связанный контент