Найти и переименовать файлы без расширения? - PullRequest
16 голосов
/ 22 июня 2009

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

  1. Поиск файлов без расширения (в указанной папке)
  2. Добавить .bla в конец имени файла

Я такой пакетный скрипт для Windows, даже не знаю, с чего начать. Предложения?

Ответы [ 3 ]

29 голосов
/ 22 июня 2009

Для пакетных файлов Windows это будет переименовывать только файлы без расширения с расширением .bla:

rename *. *.bla

Обратите внимание, что первый аргумент - это звезда и точка: *.

Второй аргумент: * .bla

Комбинация начальной точки (*.) Представляет файлы без расширений в этом контексте.

До:

06/21/2009  11:57 PM                 6 test
06/21/2009  11:57 PM                 7 test.exe
06/21/2009  11:57 PM                 7 test2

После того, как:

06/21/2009  11:57 PM                 6 test.bla
06/21/2009  11:57 PM                 7 test.exe
06/21/2009  11:57 PM                 7 test2.bla

Дополнительное примечание: противоположная командная строка переименует все файлы .bla в файлы без расширений.

EDIT

Для рекурсивного переименования файлов без расширения в подкаталогах (не поддерживает пробелы в путях):

@echo off
FOR /F %%i in ('dir /b/s/A-d') DO (
  if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)

EDIT2:

Для рекурсивного переименования файлов без расширения в подкаталогах (поддерживает пробелы в пути):

@echo off
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
  if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
6 голосов
/ 23 июня 2009

Вот другая возможная команда для рекурсивного переименования файлов без расширений (при условии, что пути к файлам не содержат пробелов ):

for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"

Пакетная версия (с удвоением %):

@echo off
for /f %%i in ('dir *. /b /s /a-d') do (
   rename "%%~fi" "%%~ni.bla"
)


Если имена файлов или папок содержат пробелы , используйте эту команду вместо:

for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"

Пакетная версия:

@echo off
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
   rename "%%~fi" "%%~ni.bla"
)

Редактировать: вот еще более короткая однострочная строка, которая поддерживает пробелы в путях:

for /r %i in (*.) do ren "%~fi" "%~ni.bla"

Пакетная версия:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"
5 голосов
/ 22 июня 2009

, чтобы сделать это в подкаталогах, используйте это:

 for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla

если вы используете это в пакетном файле, вам нужно удвоить '%'

 for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla

редактирование:

и если у вас есть пробелы в именах каталогов, вы можете попробовать это (пакетная версия):

 for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"
...