Войти

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


Дмитрий_Кульгейко@vk
07-07-2016, 12:30
Здравствуйте.
Есть задача переименовать файл 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х значного в двух?

megaloman
07-07-2016, 13:23
Дмитрий_Кульгейко@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!"
)

Дмитрий_Кульгейко@vk
07-07-2016, 13:42
Спасибо за оперативный ответ.


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

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

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

megaloman
07-07-2016, 13:49
Может быть и одна, и две, и расширение можно изменить (хотя смысл этого действия от меня ускользает):@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!"
)

Дмитрий_Кульгейко@vk
07-07-2016, 14:51
Супер. Это именно то что надо.
Большущее спасибо.

Дмитрий_Кульгейко@vk
12-07-2016, 17:54
Пришло первое число и опять я попал с одной цифрой, но уже в ДД.

megaloman
12-07-2016, 18:52
Продумывать постановку надо тщательнее :)@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%""
)

Дмитрий_Кульгейко@vk
12-07-2016, 19:22
Год на выходе тоже двухзначный должен быть.

И как теперь подставить это в старую связку.



@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%""
)

megaloman
12-07-2016, 19:47
Дмитрий_Кульгейко@vk, Я давно учел эту проблему в теме Поиск и замена текста в файле (http://forum.oszone.net/thread-316638.html)

Дмитрий_Кульгейко@vk
12-07-2016, 19:51
спасибо, увидел.

Дмитрий_Кульгейко@vk
12-07-2016, 20:15
Спасибо огромное за помощь.




© OSzone.net 2001-2012