![]() |
Переименование имени файла по маске
Здравствуйте.
Есть задача переименовать файл 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х значного в двух? |
Дмитрий_Кульгейко@vk, Если Вы уверены, что месяц в исходном имени занимает одну позицию, то
Код:
@Echo Off |
Спасибо за оперативный ответ.
Месяц в исходном файле действительно 1 цифра, пока не дойдет дата до октября т.е. 10 - тогда будет уже 2 цифры, и все поплывет. Получается тут надо проверить условие, если десятая цифра=1, то надо брать две цифры 10-11, а если меньше 1, то только одну. И еще необходимо поменять расширение на txt. |
Может быть и одна, и две, и расширение можно изменить (хотя смысл этого действия от меня ускользает):
Код:
@Echo Off |
Супер. Это именно то что надо.
Большущее спасибо. |
Пришло первое число и опять я попал с одной цифрой, но уже в ДД.
|
Продумывать постановку надо тщательнее :)
Код:
@Echo Off |
Год на выходе тоже двухзначный должен быть.
И как теперь подставить это в старую связку. Скрытый текст
@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, Я давно учел эту проблему в теме Поиск и замена текста в файле
|
спасибо, увидел.
|
Спасибо огромное за помощь.
|
Время: 20:39. |
Время: 20:39.
© OSzone.net 2001-