CMD/BAT - [решено] Переименовать jpg файлы, взяв имя из первой строки соответствующего одноименного txt

Ответить
Аватара пользователя
use809

CMD/BAT - [решено] Переименовать jpg файлы, взяв имя из первой строки соответствующего одноименного txt

Сообщение use809 »

Здравствуйте. Есть такие файлы:

kniga-0001.txt

kniga-0001.jpg



kniga-0002.txt

kniga-0002.jpg



kniga-0003.txt

kniga-0003.jpg



jurnal-0001.txt

jurnal-0001.jpg



jurnal-0002.txt

jurnal-0002.jpg



jurnal-0004.txt

jurnal-0004.jpg





и т.д. Т.е. есть пара файлов jpg и txt, в текстовом файле первой строкой идет полное имя jpg файла + комментарий после символа @ (всё в первой строке, комментария может и не быть).

Задача: нужно из каждого txt файла прочитать первую строку до символа @ (которого может и не быть) и переименовать jpg файл в этот текст.

Некоторые полные имена (первая строка до @) могут быть длиннее 255 символов, можно отсекать все, что длиннее, допустим, 150 символов (с запасом на длину пути), добавляя многоточие "...".





Пример 1:

kniga-0001.txt



Ostrov sokrovish. R. Stivenson@prikluchenia_pirati_morskaya_tema



Avtor: R.Stivenson

Data: 1882

Yazik: Russkiy



Нужно переименовать файл "kniga-0001.jpg" в "Ostrov sokrovish. R. Stivenson.jpg".





Пример 2:

kniga-0002.txt



Diktator. S. Snegov



Avtor: Sergei Snegov

Zhanr: Fantastika



Нужно переименовать файл "kniga-0002.jpg" в "Diktator. S. Snegov.jpg".



Заранее спасибо!
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Переименовать jpg файлы, взяв имя из первой строки соответствующего одноименного txt

Сообщение megaloman »

Код:

Код: Выделить всё

@Echo Off
cls
Chcp 1251 >nul
Set "BoxIn=Z:\Box_In"
Set "Ext1=jpg"
Set "Ext2=txt"
Set /A Len=150
Set "Big=..."
Set "Delim=@"
FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\*.%Ext1%" /B /A:-D 2^>nul`) DO (
	If Exist "%BoxIn%\%%~nf.%Ext2%" Call :First "%BoxIn%\%%~nf.%Ext2%" "%BoxIn%\%%f" 
)
GoTo :Eof
:First
	Set "NName= "
	FOR /F "usebackq tokens=1 delims=%Delim%" %%n IN (%1) DO Set "NName=%%n" &GoTo :Continue
	:Continue
	If "%NName: =%"=="" GoTo :Eof
	Call Set "NNo=%%NName:~%Len%,1%%"
	Call Set "NName=%%NName:~0,%Len%%%"
	If Not "%NNo%"=="" Set "NName=%NName%%Big%"
	Move /Y %2 "%~dp2%NName%%~x2" >nul
GoTo :Eof
Ответить

Вернуться в «Скриптовые языки администрирования Windows»