PDA

Показать полную графическую версию : Переименование файлов


Verilog
09-12-2014, 19:28
Добрый вечер!
Имеется софтина, генерирующая логи с названиями в формате 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
09-12-2014, 21:00
Можно ли сделать универсальный скрипт на все 3 типа имён <...>? »


@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
10-12-2014, 11:23
Спасибо, Georgio!
Но под универсальностью я понимал двухпроходный алгоритм, где сначала выявляются постоянные и переменная части, а уже затем, на основе результатов анализа, выполняется переименование, ибо просматривать множество файлов и определять эти части на глаз весьма утомительно. Приведённые мной примеры сильно упрощены для облегчения понимания сути, реальные имена длинные (30-40 символов) и содержат информацию о текущей конфигурации оборудования (название папки содержит примерно ту же информацию, но в расширенном виде, поэтому её дублирование в именах файлов избыточно), т. е. возможных сочетаний для частей AAAA и CCCC - великое множество. Поэтому и хотелось бы, чтобы скрипт определял их сам. Обрабатывать все папки (их значительно больше трёх) за раз не требуется, работаем только с текущей папкой.

Georgio
10-12-2014, 12:45
Возможно, кто-нибудь за это возьмется. Я -- нет.

Verilog
10-12-2014, 14:55
Понимаю. И на том спасибо.




© OSzone.net 2001-2012