Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Переименование файлов (http://forum.oszone.net/showthread.php?t=292347)

Verilog 09-12-2014 19:28 2441928

Переименование файлов
 
Добрый вечер!
Имеется софтина, генерирующая логи с названиями в формате 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 2441971

Цитата:

Цитата Verilog
Можно ли сделать универсальный скрипт на все 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 2442147

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

Georgio 10-12-2014 12:45 2442212

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

Verilog 10-12-2014 14:55 2442304

Понимаю. И на том спасибо.


Время: 21:35.

Время: 21:35.
© OSzone.net 2001-