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

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

use809 07-03-2017 09:34 2717347

Переименовать jpg файлы, взяв имя из первой строки соответствующего одноименного txt
 
Вложений: 1
Здравствуйте. Есть такие файлы:
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 2717370

Цитата:

Цитата use809
в текстовом файле… »

Упакуйте образец текстового файла в архив и приложите к сообщению.

megaloman 07-03-2017 14:01 2717398

Код:

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

Благодарю! Работает как надо.


Время: 10:08.

Время: 10:08.
© OSzone.net 2001-