Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование фалов по маске

Ответить
Настройки темы
CMD/BAT - Переименование фалов по маске

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Уважаемые друзья, добрый вечер!
Подскажите пожалуйста.
Такая задача.
В папку store, сохраняются файлы вида i02_155567_v_f_160523.txt, требуется согласно данной маске файла переименовать файл в ООО ИНН-АП-Рога Копыта_лист_230516.txt

Отправлено: 17:45, 24-05-2016

 

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Огромное спасибо, удалось написать код для группы файлов.
Скажите, пожалуй последний вопрос, если к маске файла добавляет еще одна группа символов i02_155567_v_f_160523_GRE.txt, то что в коде надо добавить, я пробовал добавлять GRE в любое место (v_f_[0-9]*\>"') не помогает.

Отправлено: 16:39, 26-05-2016 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
set "d=store"
for /f "tokens=1-6 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"^i[0-9][0-9]_[0-9]*_v_f_[0-9]*_GRE\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e_%%f" "ООО ИНН-АП-Рога Копыта_лист_%%e.txt"
exit/b
В переименованное имя поставил предпоследний токен 160523 из примера, так как до сих пор неизвестно как должно выглядеть имя конечного файла, что оно должно забирать из предыдущего и каким образом формироваться.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 27-05-2016 | #12


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Файл исходник i02_155567_v_f_160523.txt -
1. i02 - значение неизменное.
2. 155567 - это номер, _v_f_ - это буквенное значение, оба эти значения могут меняться, от точного соответствия значения блока "155567_v_f_" - "номер_буква_буква_" формируется часть имени файла (ООО ИНН-АП-'номербуквабуква'_лист_230516.txt ) (Рога Копыта, Копыта Рога, Рогатые копыта).
3. Далее i02_155567_v_f_160523.txt - 160523 - должно просто переноситься в новое имя файла.
4. Также могут встречаться файлы вида i02_155567_v_f_160523_GRE.txt - где GRE - всегда неизменное значение, при наличии которого в новое имя оно переносится в неизменном виде, а именно ООО ИНН-АП-Рога Копыта_лист_230516_USD.txt

Отправлено: 10:29, 27-05-2016 | #13


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Исходя из того что вижу конечное имя берет все после 5го токена по _ и это может быть как 230516.txt так и 160523_GRE.txt - хорошо, здесь ясно. Вот это "значения могут меняться, от точного соответствия значения блока "155567_v_f_" - "номер_буква_буква_" " - более чем непонятно, очень подробно и точно как именно меняются, на что, каков полный процесс формирования из этой части в эту "Рога Копыта, Копыта Рога, Рогатые копыта". Теперь надо знать насколько разные или наоборот похожие имена файлов в папке, чтобы переименовывать нужные или там надо переименовать все что есть, надо чтобы вы дали несколько с десяток имен файлов в папке, которые должны быть переименованы и в их числе максимальное количество различий между собой в имени.

Без формирования "Рога Копыта, Копыта Рога, Рогатые копыта"
Код: Выделить весь код
@echo off
set "d=store"
for /f "delims=" %%a in ('dir/a-d/b "%d%"') do (
 for /f "tokens=5* delims=_" %%b in ("%%a") do (
  if "%%c"=="" (set "ds=%%b") else (set "ds=%%b_%%c")
  cmd/v/c echo "ООО ИНН-АП-Рога Копыта_лист_!ds!"
))
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:15, 27-05-2016 | #14


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Друзья, огромное спасибо, за помощь!
С 6 токеном разобрался, alpap. отдельное спасибо!
И последний вопрос, скажите пожалуйста, как можно изменить формат числа '160530', в файле исходнике выглядит так i02_155567_v_f_160523_GRE.txt, на 230516 в переименованном файле?

Последний раз редактировалось mych_man, 30-05-2016 в 15:41.


Отправлено: 14:36, 30-05-2016 | #15


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата mych_man:
160523 »
Из примера выше - это %%b в строке
Код: Выделить весь код
if "%%c"=="" (set "ds=%%b") else (set "ds=%%b_%%c")
, можете вместо %%b подставить что-то свое.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:48, 30-05-2016 | #16

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


mych_man, только учтите, что формат в исходном имени не зря выбран как "ГГММДД". Иначе при сортировке по алфавиту вас будут ждать увлекательные развлечения при визуальном поиске. Как впрочем и в некоторых других ситуациях.

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:12, 30-05-2016 | #17


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата alpap:
Из примера выше - это %%b в строке
Код:
if "%%c"=="" (set "ds=%%b") else (set "ds=%%b_%%c")
, можете вместо %%b подставить что-то свое. »
Скажите, а как в таком случае должен выглядеть полный текст кода, вместе с данным куском?

Отправлено: 10:39, 31-05-2016 | #18


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Друзья, извините я решил предыдущую проблему с подстановкой символов GRE первым, вашим сриптом, ниже пример с вариациями

echo@ off
chcp 866
set "d=E:\Report\in"
for /f "tokens=1-5 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"\<i02_09971_v_d_[0-9]*\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e" "ООО-ИНН-РОГА Копыта_ОГРН_ОТЧЕТ_%%e"
for /f "tokens=1-5 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"\<i02_09972_k_d_[0-9]*\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e" "ЗАО-ИНН-БАБА ЯГА_ОГРН_ОТЧЕТ_%%e"
for /f "tokens=1-6 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"^i02_09971_v_d_[0-9]*_GRE\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e_%%f" "ООО-ИНН-РОГА КОПЫТА_ОГРН_ОТЧЕТ_%%e_%%f.txt"
for /f "tokens=1-6 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"^i02_09972_v_d_[0-9]*_USD\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e_%%f" "ЗАО-ИНН-БАБА ЯГА_ОГРН_ОТЧЕТ_%%e_%%f.txt"

как здесь изменть очередность проставленной в наименовании файла дате, чтобы получилось из i02_09971_v_d_160523.txt - ООО ИНН РОГА Копыта_ОГРН_ОТЧЕТ_230516.txt ?

Отправлено: 11:22, 31-05-2016 | #19


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Друзья, спасибо всем участникам обсуждений, задача решена.
alpap, еще раз огромное спасибо!

Отправлено: 15:00, 01-06-2016 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование фалов по маске

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименование файла по маске. Damien_here Скриптовые языки администрирования Windows 5 13-06-2017 12:51
CMD/BAT - [решено] Переименование по заданной маске bat Boiston Скриптовые языки администрирования Windows 3 18-03-2015 01:15
CMD/BAT - Переименование файлов по маске tobornforlife@vk Скриптовые языки администрирования Windows 5 24-02-2014 17:07
CMD/BAT - [решено] Копирование и переименование файла по особой маске DARK-Silver666 Скриптовые языки администрирования Windows 5 20-12-2012 21:22




 
Переход