Вы можете использовать этот простой пакетный файл для этой задачи:
@echo off
for /F "eol=| delims=" %%I in ('dir * /A-D-H /B 2^>nul') do if not "%~f0" == "%%~fI" call :RenameFile "%%I"
goto :EOF
:RenameFile
set "NewFileName=%~n1"
if not defined NewFileName goto :EOF
set "NewFileName=%NewFileName:.= %"
if "%NewFileName%" == "%~n1" goto :EOF
echo Renaming "%~nx1" to "%NewFileName%%~x1" ...
ren %1 "%NewFileName%%~x1"
goto :EOF
Первое условие IF в FOR командной строке позволяет избежать того, что сам пакетный файлпереименовывается в случае наличия маловероятного имени типа Rename.Files.bat
и сохранения в каталоге файлов для переименования.
Второе IF условие, которое является первым IF в подпрограмме RenameFile
предотвращает неправильную обработку имени файла для файлов с именем файла, начинающимся с точки и не имеющим реального расширения файла (строка после последней точки), например .htaccess
.Такие имена файлов не типичны для Windows из-за того, что они интерпретируются как файлы, не имеющие имени файла, а просто расширение файла.Но такие файлы могут существовать, если файлы Unix / Linux хранятся на дисках Windows, которые скрыты в Unix / Linux.Файловые системы Unix / Linux не имеют скрытого атрибута.Файл интерпретируется как скрытый в Unix / Linux, если его имя начинается с точки.
Третье условие IF сравнивает чувствительное к регистру текущее имя файла с именем файла после замены всехставит точки через пробелы и выходит из подпрограммы, если новое имя файла совпадает с текущим именем файла.
Примечание 1: Шаблон с подстановочными знаками, например *.*.*
или *.*
, интерпретируется как DIR и FOR , которые являются внутренними командами cmd.exe
, такими как просто *
, и поэтому соответствуют всем (не скрытым) файлам, а не только файлам, содержащим по крайней мере две или одну точку в именифайл.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
Примечание 2: Команда REN ничего не делает, если новое имя файла совпадает с текущим именем файла.Таким образом, третье условие IF не было бы действительно необходимым без командной строки ECHO рядом с концом пакетного файла.
call /?
dir /?
echo /?
for /?
goto /?
if /?
ren /?
set /?
См. Также Куда возвращается GOTO: EOF?