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

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

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

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


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

Профиль | Сайт | Отправить 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

 

Ветеран


Contributor


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

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


Дмитрий_Кульгейко@vk, Если Вы уверены, что месяц в исходном имени занимает одну позицию, то
Код: Выделить весь код
@Echo Off

Set "Mask=ma2_?????_??.pdf"
Set "Pref=12345_5_"
Set "Where=C:\TMP"

SetLocal EnableExtensions EnableDelayedExpansion

FOR %%f IN ("%Where%\%Mask%") DO (
	Set "Name=%%~nf"
	Set "Name=%Pref%!Name:~6,2!0!Name:~8,1!!Name:~-2!%%~xf"
	ren "%%f" "!Name!"
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 07-07-2016 в 14:11.

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

Отправлено: 13:23, 07-07-2016 | #2



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

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


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


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

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


Спасибо за оперативный ответ.


Месяц в исходном файле действительно 1 цифра, пока не дойдет дата до октября т.е. 10 - тогда будет уже 2 цифры, и все поплывет.

Получается тут надо проверить условие, если десятая цифра=1, то надо брать две цифры 10-11, а если меньше 1, то только одну.

И еще необходимо поменять расширение на txt.

Отправлено: 13:42, 07-07-2016 | #3


Ветеран


Contributor


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

Профиль | Отправить 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
Благодарности: 0

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


Супер. Это именно то что надо.
Большущее спасибо.

Отправлено: 14:51, 07-07-2016 | #5


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


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

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


Пришло первое число и опять я попал с одной цифрой, но уже в ДД.

Отправлено: 17:54, 12-07-2016 | #6


Ветеран


Contributor


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

Профиль | Отправить 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
Благодарности: 0

Профиль | Сайт | Отправить 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


Ветеран


Contributor


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

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


Дмитрий_Кульгейко@vk, Я давно учел эту проблему в теме Поиск и замена текста в файле

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 19:47, 12-07-2016 | #9


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


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

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


спасибо, увидел.

Отправлено: 19:51, 12-07-2016 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход