PDA

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


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

Iska
24-05-2016, 18:13
файлы вида i02_155567_v_f_160523.txt, требуется согласно данной маске »
Маску Вы не приводите. Равно определить её по одному-единственному приведённому имени не представляется возможным.

alpap
25-05-2016, 09:07
Не без помощи телепатии, конечно, взирая на немногословность ТС, могу предположить что хотелось это:

@echo off
set "d=store"
for /f "tokens=1-5 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"\<i[0-9][0-9]_[0-9]*_v_f_[0-9]*\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e" "ООО ИНН-АП-Рога Копыта_лист_%%e"
exit
.

mych_man
25-05-2016, 10:42
Добрый день!
Да извините пожалуйста, за такую постановку задачи, давайте более подробно
1. Файл исходник вида i02_155567_v_f_160523.txt - где "155567" - номер, которому соответствует название "Рога Копыта", "160523" - формирования файла, которая должна переноситься в новое название файла
2. Файл кладется в папку F:\Store

При отработке

@echo off
set "d=store"
for /f "tokens=1-5 delims=_" %%a in ('dir/a-d/b "%d%"^|findstr/irc:"\<i[0-9][0-9]_[0-9]*_v_f_[0-9]*\>"') do ren "%d%\%%a_%%b_%%c_%%d_%%e" "ООО ИНН-АП-Рога Копыта_лист_%%e"
exit

появляется ошибка "непредвиденное появление %%a"

alpap
25-05-2016, 13:12
mych_man,
Я, конечно, все понимаю, но не до такой же степени!
код, что я привел выше копируется отсюда, вставляется в любой созданный текстовый файл, например "name.txt", потом меняем расширение этого файла на .bat, получив при этом, например, "name.bat" и при наличии папки "store" и файла что вы привели запускаем созданный файл из любого места (если указать полный путь к папке, у вас вторая строка кода должна быть set "d=F:\Store") обычным или двойным щелчком левой клавишей мыши, как уж у вас настроено.
Кстати больше света на маску файла вы не пролили.

mych_man
25-05-2016, 14:55
От того вы полностью описали "как сделать bat" ваш вариант рабочим не становится))
Однако, я хочу поблагодарить вас за старания, мне удалось с помощью вашего решения изменить имя файла, правда на нечитаемые символы.
По поводу маски файла, не понимаю, что можно еще описать? зависимость названия файла от маски "155567" и дублирования числа формирования, напишите пожалуйста, что можно еще добавить.
Еще раз, спасибо за ваши старания.

Iska
25-05-2016, 16:40
правда на нечитаемые символы. »
Кодировка пакетного файла должна быть OEM/866.

mych_man
25-05-2016, 17:10
Кодировка пакетного файла должна быть OEM/866 »
Да, это помогло, скрипт работает как надо!
Друзья, поясните пожалуйста, где в этом скрипте и что необходимо менять, если к примеру необходимо будет переименовывать файлы с другими масками на другие имена, зависимость прежняя i02_название компании_v_f_дата.txt
Насколько я понял, данный скрипт умеет переименовывать только файл i02_155567_v_f_160523.txt.
Заранее спасибо!

alpap
25-05-2016, 20:47
По поводу маски файла, не понимаю, что можно еще описать? »
зависимость прежняя i02_название компании_v_f_дата.txt »
вот это-то и требовалось всю дорогу
сейчас маска "началослова iчислочисло_любыечисла_v_f_любыечисла конецслова", причем все до между и после _ есть в переменной и может быть опущено изменено добавлено. Имя файла может быть сейчас и таким i45_9876543_v_f_123456789.txt, при коде выше остается только эта часть 123456789.txt

Iska
26-05-2016, 07:26
Ну, хоть коллега alpap понял ;).

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

alpap
27-05-2016, 09:00
@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 из примера, так как до сих пор неизвестно как должно выглядеть имя конечного файла, что оно должно забирать из предыдущего и каким образом формироваться.

mych_man
27-05-2016, 10:29
Файл исходник 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

alpap
27-05-2016, 16:15
Исходя из того что вижу конечное имя берет все после 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

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

alpap
30-05-2016, 22:48
160523 »
Из примера выше - это %%b в строке if "%%c"=="" (set "ds=%%b") else (set "ds=%%b_%%c"), можете вместо %%b подставить что-то свое.

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

mych_man
31-05-2016, 10:39
Из примера выше - это %%b в строке
Код:
if "%%c"=="" (set "ds=%%b") else (set "ds=%%b_%%c")
, можете вместо %%b подставить что-то свое. »

Скажите, а как в таком случае должен выглядеть полный текст кода, вместе с данным куском?

mych_man
31-05-2016, 11:22
Друзья, извините я решил предыдущую проблему с подстановкой символов 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 ?

mych_man
01-06-2016, 15:00
Друзья, спасибо всем участникам обсуждений, задача решена.
alpap, еще раз огромное спасибо!




© OSzone.net 2001-2012