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

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

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

3 ответа3

1

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

0

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

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

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

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

0

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

Он использует отложенное расширение, поэтому вы должны запустить его из командной строки с отложенным расширением (простой запуск 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .