Переименуйте группу файлов, заменив определенные символы, используя пакетный скрипт - PullRequest
0 голосов
/ 31 мая 2018

Ищем пакетный скрипт для переименования папки с файлами.

Имена похожи на My.File.Is.Not.Really.Mine.txt, Another.File.Not.Mine.txt и т. Д.

Хотелось бы переименовать его в «Мой файл на самом деле не Mine.txt», другой файл не «Mine.txt»

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вот простой пример расширения и подстановки переменных на основе вашего относительно неоднозначного не по теме запроса:

@For %%A In ("ChangeMe\*.*.*") Do @Call :Sub "%%A"
@Exit /B

:Sub
@Set "fName=%~n1"
@Ren %1 "%fName:.= %%~x1"

Вам необходимо либо заменить ChangeMe\ на полное или относительное имя каталога, содержащееваши файлы или удалите ChangeMe\ полностью и поместите пакетный файл в каталог, содержащий эти файлы.


Этот предпочтительный метод использует сопоставление с подстановочными знаками Where:

@For /F Delims^=^ EOL^= %%A In ('Where "ChangeMe:*.*.*"') Do @Call :Sub "%%A"
@Exit /B

:Sub
@Set "fName=%~n1"
@Ren %1 "%fName:.= %%~x1"

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

0 голосов
/ 31 мая 2018

Вы можете использовать этот простой пакетный файл для этой задачи:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...