Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
surer
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 13
#1

Переименование файлов в соответствии с данными из заданной таблицы - CMD/BAT

10.10.2012, 11:09. Просмотров 3821. Ответов 9
Метки нет (Все метки)

Доброго времени суток!

Есть несколько сотен-тысяч файлов, так же есть таблица с несколькими полями (id, date, etc).
Задача в том, чтобы переименовать файлы, в имени которых содержится уникальный номер ID в соответствии с таблицей, в которой первый столбец будет тот самый ID.
http://www.cyberforum.ru/cmd-bat/thread1772964.html
Например:
File-148907.tst
В таблице есть строка:
148907 20121010 4451 12345678901
Итог:
Было File-148907.tst
Стало 20121010_4451_12345678901.tst
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 11:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Переименование файлов в соответствии с данными из заданной таблицы (CMD/BAT):

Распределение файлов по папкам, создаваемым в соответствии с частями имён этих файлов
Всем привет, я работаю в сфере 3d визуализации и так получилось что огромные...

Перемещение файлов в каталоги, создаваемые в соответствии с именами или частями имён этих файлов
Добрый день. Прошу помочь. Задача: в текущем каталоге имеется N-ое кол-во...

Переименование файлов в папках с добавлением к именам этих файлов имён этих папок
Есть 4 папки с архивом записей с камеры видеонаблюдения с именами 13 14 15 16....

Переименование файлов
Есть некоторое количество файлов в папке как переименовать все файлы , что бы...

Переименование файлов
Доброго все дня! Подскажите как с помощью cmd переименовать файл так чтобы в...

9
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
10.10.2012, 18:33 #2
Цитата Сообщение от surer Посмотреть сообщение
сотен-тысяч файлов
BAT не сгодится для такой задачи (упрется в производительность).

Рекомендую делать решение хотя бы под VBS. Там можно воспользоваться объектом Scripting.Dictionary.
0
surer
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 13
10.10.2012, 23:53  [ТС] #3
Может Вы меня не так поняли? Я имел ввиду несколько сотен, в редких случаях тысяч (2-3 тысячи) файлов. Если настроить ежедневный таск, то вряд ли будет превышать 200-300.
0
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
11.10.2012, 02:16 #4
О_о

Цитата Сообщение от surer Посмотреть сообщение
несколько сотен-тысяч
Я действительно прочитал - несколько 100.000
0
surer
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 13
15.10.2012, 09:27  [ТС] #5
Так что, cmd эта задача не по силам?
0
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
16.10.2012, 01:57 #6

Не по теме:

По силам. Наверно у активных отвечающих мало времени, чтобы ней заняться.



Добавлено через 29 минут
Цитата Сообщение от surer Посмотреть сообщение
файлы, в имени которых содержится уникальный номер ID
Нет, все равно перебором не пойдет.
Это ж 1000*1000 операций внешней командой Find.
Внешняя команда - не вариант.

Можно сделать нормально через виртуальный словарь.
Мне нужно только знать особенности вариаций названий файлов.

Итак,
1) искомый ID внутри файла всегда ли заканчивается точкой, после которой сразу идет расширение файла?
2) ID всегда начинается с 6-го символа в имени файла?
3) Бывают ли перед ID другие цифры?
4) Возможно, есть другой критерий схожести?

Все это мне нужно, чтобы вырезать число из имени файла по какому-то единому правилу.
0
surer
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 13
16.10.2012, 09:24  [ТС] #7
Цитата Сообщение от Dragokas Посмотреть сообщение
1) искомый ID внутри файла всегда ли заканчивается точкой, после которой сразу идет расширение файла?
2) ID всегда начинается с 6-го символа в имени файла?
3) Бывают ли перед ID другие цифры?
4) Возможно, есть другой критерий схожести?
1) Всегда. Название файла IVR103-1692513183.wav
2) с 8
3) 4,5,6 символы могут меняться
4) Только этот ID
Конкретный пример, строка из таблицы:
1692513183 88005555555 2012-10-12 10:08:34.000
Имя файла: IVR103-1692513183.wav
Конечное имя файла после переименования: 88005555555_12102012_1008.wav
0
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
16.10.2012, 11:36 #8
ок, вечером завершу.

Добавлено через 1 час 10 минут
А словарь замен будет дополняться, как часто?

Есть ли необходимость мне делать в 2 этапа:
1) Задать вопрос пользователю - нужно ли заново конвертировать новый вариант словаря.
2) Если да - конвертирование словаря в другой файл (внутри файла будет замена 2012-10-12 10:08:34.000 -> на 88005555555_12102012_1008)
3) Чтение словаря из нового файла в память.
4) Переименование.

Или сразу и всегда в одно действие:
1) Конвертирование без создания промежуточного файла и сразу в память.
2) Переименование.

Если пользоваться вариантом № 1 и отвечать на вопрос "Нет", то будет естественно быстрее.
Если № 2, то дольше но без лишних вопросов.
0
surer
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 13
16.10.2012, 16:27  [ТС] #9
Если под словарем понимается файл с таблицей соответствия, то он будет обновляться раз в день. Соответственно, второй этап подходит больше.
0
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
18.10.2012, 02:04 #10
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@echo off
Setlocal EnableDelayedExpansion
::Файл с правилами переименования
set Dict=h:\1\Rulez.txt
::Папка, где переименовывать
set Folder=h:\1\Fold
::Маска для файлов
set mask=*
::Создаем виртуальный словарь в буфере
for /F "tokens=1-4" %%A in (%Dict%) do (
  set dat=%%C
  set dat=!dat:~8,2!!dat:~5,2!!dat:~0,4!
  set tim=%%D
  set tim=!tim:~0,-7!
  set tim=!tim:^:=!
  set ID_%%A=%%B_!dat!_!tim!
)
::Просматриваем все файлы (ключ /S - рекурсивно)
For /F "delims=" %%A in ('dir "%Folder%\%mask%" /s /b') Do (
  set key=%%~nA
  set key=!key:~7!
  if defined ID_!key! Call :Renaming "%%~A" !key! "%%~xA"
)
pause
goto :eof
 
:Renaming
set key=%2
ren "%~1" !ID_%key%!%~3%
exit /b 0
Словарь читается, преобразовуется и сохраняется в ОЗУ.
ID файла не ищется по всему массиву, а сразу берет нужное значение для переименования.
1
18.10.2012, 02:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 02:04
Привет! Вот еще темы с решениями:

Переименование файлов
@echo off setlocal enabledelayedexpansion chcp 1251 set /p k=Введите...

Пакетное переименование файлов
Уважаемые форумчане, подскажите пожалуйста решение. Имеется множество файлов...

Сравнение и переименование файлов
Нужен батник Задача для меня такова: есть папка 2013 в ней находится...

Переименование файлов в папке
Доброго времени суток! Помогите написать батник, чтобы автоматически менял имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru