Цитата Busla:
я бы попробовал объяснить заказчику »
|
Программы пишутся для клиента, конечно, с клиентом надо работать, но если для него главное - номер файла, то дата - это как комментарий. Кто девушку ужинает, тот её и танцует.
А перед тем, как переименовывать, я бы проанализировал имя файла, чтобы не исказить имя файла не соответствуещее критерию
Код:
@Echo Off
Call :RenMask "%~1"
GoTo :Eof
:RenMask
If "%~1"=="" Echo No arguments for CMD-file "%~dpnx0"& GoTo :Eof
If Not Exist "%~1" Echo File "%~1" Not Found& GoTo :Eof
Set "FMask=[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_20[0-9][0-9][0-1][0-9][0-3][0-9]\.pdf"
Set "FName=%~nx1"
Set "NewName=%FName:~0,9%%FName:~15,2%.%FName:~13,2%.%FName:~9,4%%FName:~17,4%"
Echo %FName%| Findstr.exe /R /B /I "%FMask%" >nul&& Ren "%~1" "%NewName%"|| Echo File name "%~1" incorrect
GoTo :Eof
Путь к целевому файлу указывается параметром пакетного файла. Также можно просто перетащить целевой файл на пакетный файл в Проводнике.
Если протелепатить, то, скорее всего, имеется папка с кучей подобных файлов, которые надо переименовать по капризу заказчика.
Код:
@Echo Off
cls
Set "FileIn=Z:\Box_In\Тра ля ля\????????_20??????.pdf"
FOR %%f IN ("%FileIn%") DO Call :RenMask "%%~f"
pause
GoTo :Eof
:RenMask
If "%~1"=="" Echo No arguments for CMD-file "%~dpnx0"& GoTo :Eof
If Not Exist "%~1" Echo File "%~1" Not Found& GoTo :Eof
Set "FMask=[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_20[0-9][0-9][0-1][0-9][0-3][0-9]\.pdf"
Set "FName=%~nx1"
Set "NewName=%FName:~0,9%%FName:~15,2%.%FName:~13,2%.%FName:~9,4%%FName:~17,4%"
Echo %FName%| Findstr.exe /R /B /I "%FMask%" >nul&& Ren "%~1" "%NewName%"|| Echo File name "%~1" incorrect
GoTo :Eof
Маска файлов с путём к папке указывается явно в скрипте в переменной FileIn. Можно, конечно, сделать так, чтобы работало при перетаскивании имени папки на батник, но я не сделал, посчитал, что это одна специфическая папка. Скрипт можно выполнять многократно - входной контроль не позволит переименовать уже переименованные файлы.
Возможно, я переусложнил задачу