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

Переименование файлов по маске

16.01.2017, 17:52. Просмотров 2702. Ответов 31
Метки нет (Все метки)

Уважаемые друзья, добрый день!
Стоит задача;
В папку С:\1, копируются файлы вида КОМПАНИЯ-ПППП (ТиНс) Y_20170116.html, требуется данные файл переименовать в файл вида ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир_16012017 (т.е., формат даты в конце файла необходимо перевернуть).
Подскажите пожалуйста, как можно решить данную задачу, я написал скрипт, но он только добавляет новое название к старомуу и не переворачивает число.
Буду очень признателен за помощь.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2017, 17:52
Ответы с готовыми решениями:

Переименование файлов по маске
Подскажите пожалуйста, как переименовать файлы батником EUSimple-KEP.12345678.25-01-14.12-34.p10...

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

Переименование файлов по маске имён
Доброго дня! Поставили мне такую задачу: Есть файлы в папке 0262500 (1).011 0262500 (2).011...

Переименование группы файлов по маске
Здравствуйте, не нашел синтаксиса тонкостей работы с именами файлов. Задача: в папку прилетают...

Групповое переименование файлов по маске
Доброго времени суток! В написании командных скриптов только разбираюсь. Помогите, пожалуйста,...

31
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
07.02.2017, 13:46  [ТС] 21
Итак, задание следующее.
В папку С:\2, каждый день попадают файлы вида (АВД ДУ1741 (Понт) Y_20170202.htm, или АВД ДУ1647-ФРРР (ВР)_02.02.2017-02.02.2017_500.html), в которых каждый день меняется только значение числа 20170202, что является датой построения отчета, но не ровно дате создания файла, где в первом примере "ДУ1741" и во втором примере "ФРРР" уникальное название (маска).
Требуется, переименовывать данные файлы по примеру:

Старое название---новое название

АВД ДУ1641 (ПиНт) Y_20170202.html ---- ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
АВД ДУ1642 0403 (ПиНт) Y_20170202.html---ООО АВД-УА_АВД-Нефть_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
АВД ДУ 1643 0403 (ПиНт) Y_20170202.html---ООО АВД-УА_АВД-Бумаги_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
АВД ДУ1644-МПК (ПиНт) Y_20170202.html---ООО АВД-УА_АВД-Мировая экономическая торговля_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
АВД ДУ1645 (ПиНт) Y_20170202.html---ООО АВД-УА_АВД-Западная Равнина_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
АВД ДУ1646 (ПиНт) YE9_20170202.html---ООО АВД-УА_АВД-Балансированный_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
АВД ДУ1647-ФРРР (ВР)_02.02.2017-02.02.2017_500.html---ООО АВД-УА_АВД-Траст рынков западаных стран_НОМ_отчет смены_Покрытие_(ПиНт)_20022017

Также нужно брать числовое значение в конце названия файла и переносить его в новом названии файла.
0
alpap
1885 / 1382 / 456
Регистрация: 26.04.2015
Сообщений: 4,686
07.02.2017, 14:30 22
Для уточнения (с вами всего можно ожидать):
Всегда будет именно так?
Код
...
АВД ДУ1645 (ПиНт) Y_дата.html---ООО АВД-УА_АВД-Западная Равнина_НОМ_отчет смены_Покрытие_(ПиНт)_измдата
АВД ДУ1646 (ПиНт) YE9_дата.html---ООО АВД-УА_АВД-Балансированный_НОМ_отчет смены_Покрытие_(ПиНт)_измдата
АВД ДУ1647-ФРРР (ВР)_snдата-skдата_500.html---ООО АВД-УА_АВД-Траст рынков западаных стран_НОМ_отчет смены_Покрытие_(ПиНт)_измдата
...
это например
АВД ДУ1645 (ПиНт) Y_дата.html
не может быть таким когда-то?
АВД ДУ1945 (ПиНт) Y_дата.html
или
АВД ДУ1645 (ПиНт) X_дата.html
или
ДВА ДУ1645 (ПиНт) Y_дата.html
Даже правильно сказать, неизменная часть правой части всегда соответствует КАКОЙ ИМЕННО части слева?

расширение то же остается (не указано просто)?

Добавлено через 6 минут
каков прицип образования даты в подобных файлах АВД ДУ1647-ФРРР (ВР)_02.02.2017-02.02.2017_500.html
расшифруйте это 02.02.2017-02.02.2017_500
бывают ли еще отличные от формата _20170202. имена?
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
07.02.2017, 14:42  [ТС] 23
1. Маска вида ДУ1645 - всегда константа. Т.е. если макса "ДУ1645 (ПиНт)" то переименовать файл в ООО АВД-УА_АВД-Западная Равнина_НОМ_отчет смены_Покрытие_(ПиНт)_измдата.
2. Расширение всегда html
3. Образование даты вида 02.02.2017-02.02.2017_500, сложно сказать уместно переносить первую часть до - , т.е. 02.02.2017
0
alpap
1885 / 1382 / 456
Регистрация: 26.04.2015
Сообщений: 4,686
07.02.2017, 15:10 24
Цитата Сообщение от mych_man Посмотреть сообщение
сложно сказать
тогда так
* ДУ* (*) *_дата.html
* ДУ* (*) *_дата_*.html

есть гарантия что часть до первого _ т.е. * ДУ* (*) * не будет содержать в себе _ , иначе мне тогда сложно отделить дату в конце?

Добавлено через 1 минуту
Цитата Сообщение от alpap Посмотреть сообщение
бывают ли еще отличные от формата _20170202. имена?
и это остается без ответа.

Добавлено через 4 минуты
а вообще интересно каким образом при такой маске * ДУ* (*) *_дата.html можно определить что именно например
АВД ДУ1641 (ПиНт) Y_20170202.html ---- ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_20022017

Добавлено через 3 минуты
как вот вы, например, без автоматизации, вручную определяли какой именно АВД ДУ* (ПиНт) *_дата.html надо переименовать в ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_sдата? Интересно.

Добавлено через 6 минут
или скажем, если АВД ДУ1645 (ПиНт) *_дата.html=ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_sдата
и также далее
то приведенный список имен файлов уже конечен, если нет, нужен полный список, если он неизвестен, все это яйца выеденного не стоит.
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
07.02.2017, 15:16  [ТС] 25
тогда так
* ДУ* (*) *_дата.html
* ДУ* (*) *_дата_*.html

есть гарантия что часть до первого _ т.е. * ДУ* (*) * не будет содержать в себе _ , иначе мне тогда сложно отделить дату в конце?
Да, формат либо один, либо второй

бывают ли еще отличные от формата _20170202. имена?
и это остается без ответа.
нет, только такой

а вообще интересно каким образом при такой маске * ДУ* (*) *_дата.html можно определить что именно например
АВД ДУ1641 (ПиНт) Y_20170202.html ---- ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_20022017
- по маске, например ДУ1645

как вот вы, например, без автоматизации, вручную определяли какой именно АВД ДУ* (ПиНт) *_дата.html надо переименовать в ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_sдата? Интересно.
по маске, например ДУ1645

или скажем, если АВД ДУ1645 (ПиНт) *_дата.html=ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_sдата
и также далее
то приведенный список имен файлов уже конечен, если нет, нужен полный список, если он неизвестен, все это яйца выеденного не стоит.
да, конечен.
0
alpap
1885 / 1382 / 456
Регистрация: 26.04.2015
Сообщений: 4,686
07.02.2017, 16:34 26
если список все-таки конечен, то так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
set "d=C:\2"
set "sdate="
for /f "tokens=1* delims=_" %%a in ('dir /a-d/b "%d%\*.html"') do (
 if not defined sdate set "sdate=%%~nb"
 call :# "%%a" "%%sdate:~6%%%%sdate:~4,2%%%%sdate:~,4%%" "%%a_%%b"
)
pause& exit
 
:#
 echo %~3|>nul findstr /c:"ДУ1641" && ren "%d%\%~3" "ООО АВД-УА_АВД-Серебро_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
 echo %~3|>nul findstr /c:"ДУ1642 0403" && ren "%d%\%~3" "ООО АВД-УА_АВД-Нефть_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
 echo %~3|>nul findstr /c:"ДУ 1643 0403" && ren "%d%\%~3" "ООО АВД-УА_АВД-Бумаги_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
 echo %~3|>nul findstr /c:"ДУ1644-МПК" && ren "%d%\%~3" "ООО АВД-УА_АВД-Мировая экономическая торговля_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
 echo %~3|>nul findstr /c:"ДУ1645" && ren "%d%\%~3" "ООО АВД-УА_АВД-Западная Равнина_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
 echo %~3|>nul findstr /c:"ДУ1646" && ren "%d%\%~3" "ООО АВД-УА_АВД-Балансированный_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
 echo %~3|>nul findstr /c:"ДУ1647-ФРРР" && ren "%d%\%~3" "ООО АВД-УА_АВД-Траст рынков западаных стран_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
exit /b
или же выстраивайте дальше по аналогии.

В папке должны быть файлы, которые html, только эти, сделать так - их немного, иначе надо еще будет указывать маску для поиска файлов этого списка, например: 'dir /a-d/b "%d%\*.html"^|find "АВД ДУ"' в теле for.
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
07.02.2017, 17:02  [ТС] 27
Большое спасибо!
0
volodin661
Заблокирован
07.02.2017, 17:04 28
В принципе прекрасная инновационная идея - трансформировать всё содержимое файла в его название;
базы данных отомрут за ненадобностью, это же сколько ай-тишных дармоедов освободится !
собрать их и отправить нах на Марс, как собственно Илон Маск и хотел, чтобы не путались под ногами.
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
15.03.2017, 19:04  [ТС] 29
Скажите пожалуйста, а как быть с постфиксом *02.02.2017-02.02.2017.html?
Как получить из АВД ДУ1647-ФРРР (ВР)_02.02.2017-02.02.2017.html получить ООО АВД-УА_АВД-Траст рынков западных стран_НОМ_отчет смены_Покрытие_(ПиНт)_20022017.html ?
Я понимаю, что надо править
Bash
1
"%%a" "%%sdate:~6%%%%sdate:~4,2%%%%sdate:~,4%%" "%%a_%%b"
но что конкретно означает каждое значение?
0
alpap
1885 / 1382 / 456
Регистрация: 26.04.2015
Сообщений: 4,686
15.03.2017, 19:45 30
AAA_BBB.html
с учетом "tokens=1* delims=_"
call :# "%%a" "%%sdate:~6%%%%sdate:~4,2%%%%sdate:~,4%%" "%%a_%%b"
%1 %2 %3
%1=AAA
%2=преобразованная дата
%3=AAA_BBB.html
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
16.03.2017, 12:09  [ТС] 31
Я сделал так, не знаю насколько это верно

Bash
1
if not defined sdate set "sdate=%%~nb" call :# "%%a" "%%sdate:~11%%%%" "%%a_%%b"
0
alpap
1885 / 1382 / 456
Регистрация: 26.04.2015
Сообщений: 4,686
16.03.2017, 16:23 32
mych_man,
надеюсь соображалки хватит, ну так как вы-то с этим работаете поймете и оставьте как тестилку на еще какой-нибудь экстра вариант, тут ясно как "играться":
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo on
::set "d=C:\2"
set "s1=АВД ДУ1641 (ПиНт) Y_20170202.html"
set "s2=АВД ДУ1647-ФРРР (ВР)_02.02.2017-02.02.2017.html"
set "sdate="
for /f "tokens=1* delims=_" %%a in ("%s2%") do (
 if not defined sdate (
  set "sdate=%%~nb"& echo %%b|>nul find "-" && (
   call :# "%%a" "%%sdate:~,2%%%%sdate:~3,2%%%%sdate:~6,4%%" "%%a_%%b"   
  ) || (
   call :# "%%a" "%%sdate:~6%%%%sdate:~4,2%%%%sdate:~,4%%" "%%a_%%b"
  )
 )
)
pause& exit
 
:#
 echo %~1 %~2
 ::echo %~3|>nul findstr /c:"ДУ1647-ФРРР" && ren "%~3" "ООО АВД-УА_АВД-Траст рынков западных стран_НОМ_отчет смены_Покрытие_(ПиНт)_%~2%~x3"
exit /b
0
16.03.2017, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2017, 16:23

Поиск по маске, копирование, переименование
Доброго времени суток Уважаемые. Я уже видел похожую тему,...

Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов
Всем доброго времени суток!:) Подскажите, пожалуйста, как переименовать файл с расширением pdf,...

Копирование файлов в папки по маске файла и маске папки
Добрый день! Товарищи, помогите. Возникла надобность раскладывать файлы по маске папки и маске...


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

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

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