Fannylife1989
04-12-2010, 10:45
Доброго времени суток.
Помогите дописать скрипт :)
Задача:
Имеется папка с jpg файлами. Названия всех файлов являются либо числами, либо в формате 5(1).jpg, 5(2).jpg, 5(3).jpg, 12(1).jpg, 12(2).jpg, 12(3).jpg, 12(4).jpg и т.д. Максимальное значение числа в скобках 9.
Есть программка IrfanView позволяющая из командной строки слить несколько файлов jpg в один tiff.
Команда будет выглядеть так
i_view32.exe /multitif=(Название_tiff_файла,первый_jpg_файл,второй_jpg_файл,третий_jpg_файл,...,N_jpg_файл)
Необходимо сделать bat-ник который проходил бы по всем названиям файлов в папке и делал из файлов 5(1).jpg, 5(2).jpg, 5(3).jpg один файл 5.tiff и дальше по аналогии.
Батник будет запускаться из папки с jpg-ами
Я тут попробовал набросать скрипт, но он почему то не работает. Подозреваю что это из-за проблемы раннего связывания, но два дня чтения справочника по командной строке результатов не дали.
Логика такова:
в переменную var пишется название текущего файла из цикла, потом отбрасываются последние 4 символа (расширение), потом последние 3 символа сравниваются с (1), и если совпало - в переменную var1 пишется часть названия первого файла до скобок (то есть в случае если файл называется 5(1).jpg в переменную должно записаться 5). Если всё это произошло, вложенный цикл заново пробегает все файлы и ищет файл, у которого часть названия до скобок равна Var1. Если находит - записывает его название (вместе со скобками) в Var2 и идёт на следующий вложенный цикл искать. И так до (9).
На оптимизацию скорости выполнения можно положить, главное чтобы работало.
Вот мой скрипт. Поправьте его пожалуйста, сроки горят :(
for %%a in (*) do (
set var=%%a
set var=%var:~0,-4%
if %var:~-3%==(1) do set var1=%var:~0,-3% (
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var2=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var3=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var4=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var5=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var6=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var7=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var8=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var9=var
for %%a in(*) do
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
i_view32.exe /multitif=(var1+".tif",var2+".jpg",var3+".jpg",var4+".jpg",var5+".jpg",var6+".jpg",var7+".jpg",var8+".jpg",var9+".jpg")
)
pause
Помогите дописать скрипт :)
Задача:
Имеется папка с jpg файлами. Названия всех файлов являются либо числами, либо в формате 5(1).jpg, 5(2).jpg, 5(3).jpg, 12(1).jpg, 12(2).jpg, 12(3).jpg, 12(4).jpg и т.д. Максимальное значение числа в скобках 9.
Есть программка IrfanView позволяющая из командной строки слить несколько файлов jpg в один tiff.
Команда будет выглядеть так
i_view32.exe /multitif=(Название_tiff_файла,первый_jpg_файл,второй_jpg_файл,третий_jpg_файл,...,N_jpg_файл)
Необходимо сделать bat-ник который проходил бы по всем названиям файлов в папке и делал из файлов 5(1).jpg, 5(2).jpg, 5(3).jpg один файл 5.tiff и дальше по аналогии.
Батник будет запускаться из папки с jpg-ами
Я тут попробовал набросать скрипт, но он почему то не работает. Подозреваю что это из-за проблемы раннего связывания, но два дня чтения справочника по командной строке результатов не дали.
Логика такова:
в переменную var пишется название текущего файла из цикла, потом отбрасываются последние 4 символа (расширение), потом последние 3 символа сравниваются с (1), и если совпало - в переменную var1 пишется часть названия первого файла до скобок (то есть в случае если файл называется 5(1).jpg в переменную должно записаться 5). Если всё это произошло, вложенный цикл заново пробегает все файлы и ищет файл, у которого часть названия до скобок равна Var1. Если находит - записывает его название (вместе со скобками) в Var2 и идёт на следующий вложенный цикл искать. И так до (9).
На оптимизацию скорости выполнения можно положить, главное чтобы работало.
Вот мой скрипт. Поправьте его пожалуйста, сроки горят :(
for %%a in (*) do (
set var=%%a
set var=%var:~0,-4%
if %var:~-3%==(1) do set var1=%var:~0,-3% (
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var2=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var3=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var4=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var5=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var6=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var7=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var8=var
for %%a in(*) do (
if %var:~0,-3%==var1 do (
set var9=var
for %%a in(*) do
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
i_view32.exe /multitif=(var1+".tif",var2+".jpg",var3+".jpg",var4+".jpg",var5+".jpg",var6+".jpg",var7+".jpg",var8+".jpg",var9+".jpg")
)
pause