Мне нужно сохранить расширения файлов, и это должно работать через подпапки.
Например: «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"