|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование имени файла по маске |
|
|
CMD/BAT - [решено] Переименование имени файла по маске
|
Новый участник Сообщения: 17 |
Профиль | Сайт | Отправить PM | Цитировать Здравствуйте.
Есть задача переименовать файл c именем "ma2_ГГГГМ_ДД.pdf" в "12345_5_ГГММДД" ma2_ - постоянная 12345_5_ - постоянная Переменные: ГГ -год ММ-месяц ДД-день Порядок переменных меняется. Написал @echo off set "d=D:\Temp\" for /f "tokens=1-5 delims=_." %%a in ('dir/a-d/b "%d%"^|findstr/irc:"\<ma2_[0-9][0-9][0-9][0-9][0-9]_[0-9][0-9].*\>"') do ren "%d%\%%a_%%b_%%c.%%d" "12345_5_%%b%%c.txt" exit Получил не совсем, что необходимо. Помогите переставить переменные в нужном порядке? Причем ММ- сделать из 1 цифры в 2 (добавить лидирующий ноль). а год перевести из 4х значного в двух? |
|
Отправлено: 12:30, 07-07-2016 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Дмитрий_Кульгейко@vk, Если Вы уверены, что месяц в исходном имени занимает одну позицию, то
|
------- Последний раз редактировалось megaloman, 07-07-2016 в 14:11. Отправлено: 13:23, 07-07-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать Спасибо за оперативный ответ.
Месяц в исходном файле действительно 1 цифра, пока не дойдет дата до октября т.е. 10 - тогда будет уже 2 цифры, и все поплывет. Получается тут надо проверить условие, если десятая цифра=1, то надо брать две цифры 10-11, а если меньше 1, то только одну. И еще необходимо поменять расширение на txt. |
Отправлено: 13:42, 07-07-2016 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Может быть и одна, и две, и расширение можно изменить (хотя смысл этого действия от меня ускользает):
@Echo Off Set "Mask=ma2_*_??.pdf" Set "Pref=12345_5_" Set "Where=C:\TMP" Set "NewExt=.txt" SetLocal EnableExtensions EnableDelayedExpansion FOR %%f IN ("%Where%\%Mask%") DO ( Set "Name=%%~nf" Set "Name2=0!Name:~8,-3!" Set "Name=%Pref%!Name:~6,2!!Name2:~-2!!Name:~-2!%NewExt%" ren "%%f" "!Name!" ) |
------- Последний раз редактировалось megaloman, 07-07-2016 в 14:11. Отправлено: 13:49, 07-07-2016 | #4 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать Супер. Это именно то что надо.
Большущее спасибо. |
|
Отправлено: 14:51, 07-07-2016 | #5 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать Пришло первое число и опять я попал с одной цифрой, но уже в ДД.
|
Отправлено: 17:54, 12-07-2016 | #6 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Продумывать постановку надо тщательнее
@Echo Off Set "Mask=ma2_*_*.pdf" Set "Pref=12345_5_" Set "Where=D:\Delete" Set "NewExt=.txt" SetLocal EnableExtensions EnableDelayedExpansion FOR %%f IN ("%Where%\%Mask%") DO ( FOR /F "usebackq tokens=2,3 delims=_" %%s IN ('%%~nf') DO Set "YYYYMM=%%s" & Set "DD=0%%t" Set "MM=0!YYYYMM:~4,2! move /Y "%%f" "%%~dpf%Pref%!YYYYMM:~2,2!!MM:~-2!!DD:~-2!%NewExt%"" ) |
------- Последний раз редактировалось megaloman, 12-07-2016 в 19:58. Отправлено: 18:52, 12-07-2016 | #7 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать Год на выходе тоже двухзначный должен быть.
И как теперь подставить это в старую связку. Скрытый текст
@echo off Set "Sep==)" Set /A NSep=4 Set "FName=c:\TEMP\ma2_*_??.pdf" Set "Pref=12345_5_" Set "NewExt=.txt" SetLocal EnableExtensions EnableDelayedExpansion For %%f IN ("%FName%") DO Call :ReLast "%%f" GoTo :Eof :ReLast Del "%~1.tmp" 2>nul Set "Str=" FOR /F "usebackq delims=" %%s IN (`type "%~1"`) DO ( If Not "!Str!"=="" >>"%~1.tmp" Echo !Str! Set "Str=%%s" ) If Not "!Str:~-%NSep%!"=="%Sep%" Del "%~1.tmp" 2>nul & GoTo :Eof If "!Str:~0,-%NSep%!"=="" Del "%~1.tmp" 2>nul & GoTo :Eof >>"%~1.tmp" Echo !Str:~0,-%NSep%! >>"%~1.tmp" Echo !Str:~-%NSep%! Set "Name=%~n1" Set "Name2=0!Name:~8,-3!" Set "Name=%Pref%!Name:~6,2!!Name2:~-2!!Name:~-2!%NewExt%" Move /Y "%~1.tmp" "%~dp1%Name%" >nul If Exist "%~dp1%Name%" Del "%~1" GoTo :Eof C годом решил так: Скрытый текст
@Echo Off Set "Mask=ma2_*_*.pdf" Set "Pref=12345_5_" Set "Where=C:\TEMP" Set "NewExt=.txt" SetLocal EnableExtensions EnableDelayedExpansion FOR %%f IN ("%Where%\%Mask%") DO ( FOR /F "usebackq tokens=2,3 delims=_" %%s IN ('%%~nf') DO Set "YYYYMM=%%s" & Set "DD=0%%t" Set "MM=0!YYYYMM:~4,2! move /Y "%%f" "%%~dpf%Pref%!YYYYMM:~2,2!!MM:~-2!!DD:~-2!%NewExt%"" ) |
Последний раз редактировалось Дмитрий_Кульгейко@vk, 12-07-2016 в 19:40. Отправлено: 19:22, 12-07-2016 | #8 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Дмитрий_Кульгейко@vk, Я давно учел эту проблему в теме Поиск и замена текста в файле
|
------- Отправлено: 19:47, 12-07-2016 | #9 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать спасибо, увидел.
|
Отправлено: 19:51, 12-07-2016 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] поиск файла по маске и запись этого имени в переменную | ___dima___ | Скриптовые языки администрирования Windows | 20 | 18-06-2017 01:46 | |
CMD/BAT - Переименование файла по маске. | Damien_here | Скриптовые языки администрирования Windows | 5 | 13-06-2017 12:51 | |
CMD/BAT - Переименование фалов по маске | mych_man | Скриптовые языки администрирования Windows | 19 | 01-06-2016 15:00 | |
CMD/BAT - Переименование файлов по маске | tobornforlife@vk | Скриптовые языки администрирования Windows | 5 | 24-02-2014 17:07 | |
CMD/BAT - [решено] Копирование и переименование файла по особой маске | DARK-Silver666 | Скриптовые языки администрирования Windows | 5 | 20-12-2012 21:22 |
|