CMD/BAT - Переименование файлов

Ответить
Аватара пользователя
Verilog

CMD/BAT - Переименование файлов

Сообщение Verilog »

Добрый вечер!

Имеется софтина, генерирующая логи с названиями в формате AAAABBBBCCCC.log, где АААА и СССС - постоянные в данной папке части (СССС может вообще отсутствовать), BBBB - переменная часть, и её длина может варьироваться.



Примеры:

- папка А: modem1234.log, modem1344.log, modem4321.log, modemqwer.log...

- папка B: tempTTYaa.log, tempTRTaa.log, tempHHJaa.log, tempXXXaa.log...

- папка C: nco12bbb.log, nco1234bbb.log, nco123bbb.log...



В каждой папке может быть несколько тысяч файлов.

Требуется в каждой папке переименовать логи так, чтобы в названии осталась только переменная часть, т. е.:



- папка А: 1234.log, 1344.log, 4321.log, qwer.log...

- папка B: TTY.log, TRT.log, HHJ.log, XXX.log...

- папка C: 12.log, 1234.log, 123.log...



За один раз обрабатывается одна папка.

Можно ли сделать универсальный скрипт на все 3 типа имён, или сильно проще для каждого свой?

Прошу помощи.
Аватара пользователя
Georgio

Re: CMD/BAT - Переименование файлов

Сообщение Georgio »

Цитата Verilog:



Можно ли сделать универсальный скрипт на все 3 типа имён ?
CMD/BAT - Переименование файлов








Код:

Код: Выделить всё

@echo off
setlocal enableextensions enabledelayedexpansion
>nul chcp 1251
set "dir=D:\Test\Папка Z"
set const_1="modem" "temp" "nco"
set const_2="aa" "bbb"
>nul chcp 866
pushd "%dir%"
for /f "delims=" %%i in ('dir /a-d/b') do (
 set x=%%i
 for %%j in (%const_1%) do (
  set x=!x:*%%~j=!
  )
 for %%j in (%const_2%) do (
  set x=!x:%%~j%%~xi=!
  )
 ren "%%i" "!x:%%~xi=!%%~xi"
 )
popd
endlocal
exit /b
Аватара пользователя
Verilog

Re: CMD/BAT - Переименование файлов

Сообщение Verilog »

Спасибо, Georgio!

Но под универсальностью я понимал двухпроходный алгоритм, где сначала выявляются постоянные и переменная части, а уже затем, на основе результатов анализа, выполняется переименование, ибо просматривать множество файлов и определять эти части на глаз весьма утомительно. Приведённые мной примеры сильно упрощены для облегчения понимания сути, реальные имена длинные (30-40 символов) и содержат информацию о текущей конфигурации оборудования (название папки содержит примерно ту же информацию, но в расширенном виде, поэтому её дублирование в именах файлов избыточно), т. е. возможных сочетаний для частей AAAA и CCCC - великое множество. Поэтому и хотелось бы, чтобы скрипт определял их сам. Обрабатывать все папки (их значительно больше трёх) за раз не требуется, работаем только с текущей папкой.
Аватара пользователя
Georgio

Re: CMD/BAT - Переименование файлов

Сообщение Georgio »

Возможно, кто-нибудь за это возьмется. Я -- нет.
Аватара пользователя
Georgio

Re: CMD/BAT - Переименование файлов

Сообщение Georgio »

Понимаю. И на том спасибо.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»