Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переименование имени файла по маске (http://forum.oszone.net/showthread.php?t=316546)

Дмитрий_Кульгейко@vk 07-07-2016 12:30 2648720

Переименование имени файла по маске
 
Здравствуйте.
Есть задача переименовать файл 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 2648745

Дмитрий_Кульгейко@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 2648750

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


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

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

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

megaloman 07-07-2016 13:49 2648754

Может быть и одна, и две, и расширение можно изменить (хотя смысл этого действия от меня ускользает):
Код:

@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 2648794

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

Дмитрий_Кульгейко@vk 12-07-2016 17:54 2650208

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

megaloman 12-07-2016 18:52 2650225

Продумывать постановку надо тщательнее :)
Код:

@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 2650229

Год на выходе тоже двухзначный должен быть.

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

Скрытый текст


@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 2650239

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

Дмитрий_Кульгейко@vk 12-07-2016 19:51 2650241

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

Дмитрий_Кульгейко@vk 12-07-2016 20:15 2650248

Спасибо огромное за помощь.


Время: 20:39.

Время: 20:39.
© OSzone.net 2001-