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

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

16.01.2017, 17:52. Просмотров 2398. Ответов 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
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
16.01.2017, 19:11 2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
set "d=papka"
for /f "delims=" %%a in ('dir /a-d/b "%d%\*.html"') do call :# "%%a"
pause& exit
 
:#
 set "fname=%~n1"
 set "fnd=%fname:~,-8%"& set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "%fnd%%sfd%%~x1"
exit /b
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
16.01.2017, 19:39  [ТС] 3
Спасибо! Забыл отметить что файлы туда будут ложиться разные, отличаться будут маской вида "ПППП" ИЛИ "АААА", где в вашем скрипте можно задать маску и имя для переименования?
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
16.01.2017, 19:56 4
Цитата Сообщение от mych_man Посмотреть сообщение
отличаться будут маской вида "ПППП" ИЛИ "АААА"
данная маска не повлияет ни на что, лишь бы файлы имели именно 8 именно цифр именно в конце имени.

Добавлено через 3 минуты
а, или если вам нужна конкретная под вас маска глубже, "бейте" по такому же принципу переменную 7й строки или другим способом, я лишь перевернул дату как просили.
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
17.01.2017, 09:53  [ТС] 5
Спасибо, дату переворачивает!
Маска жестко привязана к новому наименованию файла. Например файл "КОМПАНИЯ-ПППП (ТиНс) Y_20170116.html", где маска "ПППП", означает что файл нужно переименовать в "ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир_16012017.html"
Я не понял как можно решить задачу с переименованием в 7 строке, я написал скрипт такого вида, только он не переименовывает, добавляет новое название.

Windows Batch file
1
2
3
4
@Echo off
chcp 1251 >nul
set "d=C:\2"
for /f "tokens=*" %%a in ('dir /a-d /b *ПППП* ^| find /v "*ПППП*"') do ren "%%a" "ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир"
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
17.01.2017, 14:19 6
это
Windows Batch file
1
dir /a-d /b *ПППП* ^| find /v "*ПППП*
так
Windows Batch file
1
...dir /a-d/b "%d%"^|find "ПППП"...
эта переменная (часть имени до цифр) получается не нужна
set "fnd=%fname:~,-8%"
на выходе уже
Windows Batch file
1
ren "%d%\%~1" "ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир%sfd%%~x1"
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
17.01.2017, 16:08  [ТС] 7
Иными словами так?

Windows Batch file
1
2
3
4
5
@Echo off
chcp 1251 >nul
set "d=C:\2"
for /f "tokens=*" %%a in ('dir /a-d/b "%d%"^|find "*ПППП*"') do
ren "%d%\%~1" "ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир%sfd%%~x1"
Сделал, ничего не происходит.
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
17.01.2017, 17:04 8
Лучший ответ Сообщение было отмечено mych_man как решение

Решение

Цитата Сообщение от mych_man Посмотреть сообщение
Иными словами так?
нет
так
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
set "d=C:\2"
for /f "delims=" %%a in ('dir /a-d/b "%d%\*.html"^|find "ПППП"') do call :# "%%a"
pause& exit
 
:#
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир_%sfd%%~x1"
exit /b
и сохранить код в кодировке OEM 866
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
30.01.2017, 18:48  [ТС] 9
Огромное спасибо!
Файлы переименовываются как надо, теперь проблема в том, что вместе с файлами переименовывается и сама папка где лежат файлы.
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
30.01.2017, 19:12 10
mych_man,
Да ну? Как минимум ren не умеет папки переименовывать, да и папка задается вначале, как она этим кодом переименуется?
Ваш код сюда и скриншот выполнения, где видно что папка меняет имя!

Добавлено через 1 минуту
P.S.
Код не надо запихивать в папку с файлами, положить отдельно где-то.
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
06.02.2017, 10:38  [ТС] 11
Положил отдельно и задал место обработки.
Поскольку файлов много, код большой, я приведу краткую версия для переименования трех файлов.

Windows Batch file
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
@echo
set "d=папка"  
for /f "delims=" %%a in ('dir /a-d/b "%d%\*расширение файла*"^|find "Маска"') do call :# "%%a"
:#
set "fname=%~n1"
set "fd=%fname:~-8%"
set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
ren "%d%\%~1" "Новое название файла_%sfd%%~x1"
 
 
for /f "delims=" %%a in ('dir /a-d/b "%d%\*расширение файла*"^|find "Маска"') do call :# "%%a"
:#
set "fname=%~n1"
set "fd=%fname:~-8%"
set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
ren "%d%\%~1" "новое название файла_%sfd%%~x1"
  
  
for /f "delims=" %%a in ('dir /a-d/b "%d%\*расширение файла*"^|find "маска"') do call :# "%%a"
:#
set "fname=%~n1"
set "fd=%fname:~-8%"
set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
ren "%d%\%~1" "новое название файла_%sfd%%~x1"
 
xcopy E:\папка1\*.html E:\папка2
del /Q E:\папка1\*.html
"pause
 exit /b


 Комментарий модератора 
Последнее предупреждение:
используйте теги форматирования кода
(теги WINBATCH — кнопка "WBATCH" в "Редакторе сообщений").
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
06.02.2017, 13:12 12
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
21
22
23
24
25
26
27
@echo off
set "d=papka"
for %%A in ("mask1" "mask2" "mask3") do (
 for /f "delims=" %%a in ('dir /a-d/b "%d%\*.html"^|find "%%~A"') do set /a n+=1& call :mask%%n%% "%%a"
)
pause& exit
 
:mask1
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "maskout1_%sfd%%~x1"
exit /b
 
:mask2
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "maskout2_%sfd%%~x1"
exit /b
 
:mask3
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "maskout3_%sfd%%~x1"
exit /b
И как всегда все завсит от четкого правильного и обусловленного условия задачи, а то получается вы меняете условие и пытаетесь подогнать код для этого не подходящий и не понимете почему не работает.
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
06.02.2017, 13:21  [ТС] 13
Спасибо! Буду пробовать!
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
06.02.2017, 13:32 14
Да, чтобы вы понимали:
меняете кроме путей и расширения только маски в for - "mask1" "mask2" "mask3"
основной код заканчивается строкой 6 и если продолжаете еще выполнять что-то, пишете это после 5й строки.
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
06.02.2017, 13:32  [ТС] 15
Пожалуйста, проверьте, правильно ли я вас понял, на скрине код и результат обработки (кодировка 866)



 Комментарий модератора 
П. 5.18 Правил форума:
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
06.02.2017, 13:38 16
mych_man,
во-первых сравните это
Windows Batch file
1
set "d=C:\2"
со своей строкой
во-вторых
метки
:mask1
:mask2
и т.д.
НЕ ТРОГАТЬ!
я написал выше что вы можете менять в коде.
1
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
06.02.2017, 16:20  [ТС] 17
Всё равно не понимаю, где именно после 5 строки указать маску файла?
Можете привести пример?

Добавлено через 2 часа 17 минут
Я правильно понял?

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
set "d=papka"
for %%A in ("mask1" "mask2" "mask3") do (
 for /f "delims=" %%a in ('dir /a-d/b "%d%\*.html"^|find "маска файла"') do set /a n+=1& call :mask%%n%% "%%a"
)
pause& exit
 
:mask1
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "новое имя файла_%sfd%%~x1"
exit /b
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
06.02.2017, 20:59 18
Цитата Сообщение от mych_man Посмотреть сообщение
Можете привести пример?
это к вам вопрос
ДАЙТЕ мне нормальное условие ЧТО вы хотите сделать
Где, какие файлы, как выглядят, какие имена имеют сейчас, какие имена должны получить - где это все, я не буду тут нянчиться с вами или разбирайтесь сами в конце-концов.

Добавлено через 11 минут
вообще ничего не трогать:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
set "d=C:\2"
for %%A in ("АААА" "ПППП") do (
 for /f "delims=" %%a in ('dir /a-d/b "%d%\*.html"^|find "%%~A"') do set /a n+=1& call :mask%%n%% "%%a"
)
pause& exit
 
:mask1
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "ООО ППП-АП_ППП-Рост стоимости закрытых активов_ААА_отчет владельца_Банкир_%sfd%%~x1"
exit /b
 
:mask2
 set "fname=%~n1"
 set "fd=%fname:~-8%"
 set "sfd=%fd:~6%%fd:~4,2%%fd:~,4%"
 ren "%d%\%~1" "ООО ААА-АП_ААА-Рост стоимости закрытых активов_ППП_отчет владельца_Банкир_%sfd%%~x1"
exit /b
0
mych_man
3 / 3 / 0
Регистрация: 31.05.2016
Сообщений: 33
07.02.2017, 09:43  [ТС] 19
Извините, с моей стороны конечно было не правильно не указать задание полностью.

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

АВД ДУ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
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
07.02.2017, 13:28 20
mych_man,
Тааак ...
Теперь поясните вот что.
Под левую часть маски имени постоянно существует соответствующая именно ей правая половина? Или вы вообще новые имена даете по текучке левой части по нарастанию? Если каждый раз давать новое имя новому файлу - зачем тут вообще код, хоть как придется и быстрее будет набирать (переименовывать) имя вживую.
Цитата Сообщение от mych_man Посмотреть сообщение
не указать задание полностью
Вы и не указали его до сих пор.
ЧТО ИМЕННО надо автоматизировать?
В слудющий раз вы напишете
АВД ДУ1741 (Понт) Y_20170202.html ---- АО АВД-УА_АВД-Золото_НОМ_отчет смены_Покрытие_(Понт)_20022017
АВД ДУ1742 0403 (Понт) Y_20170202.html---АО АВД-УА_АВД-Газ_НОМ_отчет смены_Покрытие_(Понт)_20022017
АВД ДУ 1743 0403 (Понт) Y_20170202.html---АО АВД-УА_АВД-Картон_НОМ_отчет смены_Покрытие_(Понт)_20022017

Насколько сильные изменения левой и правой части
Если есть четкий шаблон соответствия левой части правой, то надо положить этот шаблон в файл (сделать типа ini) и оттуда, сравнивая с приходящими именами и переворачивая по ходу дату как надо, подставлять измененую вторую часть строки (в этой итерации) - как я себе пока представляю ...

Вот мне надо это продумывать, выдумывать. Это ваша работа и вам же надо упростить (автоматизировать) свой процесс. Продумайте четко алгоритм. И терпение мое не безгранично.
1
07.02.2017, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2017, 13:28

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

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

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


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

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

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