Войти

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


use809
07-03-2017, 09:34
Здравствуйте. Есть такие файлы:
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".

Заранее спасибо!

Iska
07-03-2017, 11:56
в текстовом файле… »
Упакуйте образец текстового файла в архив и приложите к сообщению.

megaloman
07-03-2017, 14:01
@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

use809
07-03-2017, 16:10
Благодарю! Работает как надо.




© OSzone.net 2001-2012