Найти в Дзене
Тонкости Renga

Часть 4. Скрипт массового сохранения файлов из предыдущих версий в новую

В предыдущей части мы рассмотрели возможность сохранения файла под другим именем с помощью скрипта. А есть ли у данного скрипта практическое применение? Ведь мы с тем же успехом могли просто открыть файл в самой программе Renga, а затем просто выбрать пункт меню «Сохранить как». А теперь представим, что появился новый релиз Renga и вам нужно все ваши файлы открыть, дождаться, чтобы они конвертировались в новую версию, а затем сохранить и желательно с другим именем, чтобы у вас остались файлы и в старой версии. Несколько файлов не потребует больших временных затрат. А если их десяток? На эту рутинную операцию в любом случае потребуется некоторое время, которое не хочется тратить. Вот здесь нам и пригодятся полученные знания. Но и новые мы тоже получим, не без этого. Последний созданный нами скрипт практически готов к выполнению поставленной задачи. Есть форма выбора файлов, есть механизм переименования, есть строки, которые открывают, сохраняют файл под новым именем и закрывают файл. Т

В предыдущей части мы рассмотрели возможность сохранения файла под другим именем с помощью скрипта. А есть ли у данного скрипта практическое применение? Ведь мы с тем же успехом могли просто открыть файл в самой программе Renga, а затем просто выбрать пункт меню «Сохранить как». А теперь представим, что появился новый релиз Renga и вам нужно все ваши файлы открыть, дождаться, чтобы они конвертировались в новую версию, а затем сохранить и желательно с другим именем, чтобы у вас остались файлы и в старой версии. Несколько файлов не потребует больших временных затрат. А если их десяток? На эту рутинную операцию в любом случае потребуется некоторое время, которое не хочется тратить. Вот здесь нам и пригодятся полученные знания. Но и новые мы тоже получим, не без этого.

Последний созданный нами скрипт практически готов к выполнению поставленной задачи. Есть форма выбора файлов, есть механизм переименования, есть строки, которые открывают, сохраняют файл под новым именем и закрывают файл. Теперь нужно все это поставить на конвейер.

Обратим внимание на несколько моментов:

1. Часть скрипта будет выполняться многократно для каждого выбранного файла.

2. Нам скорее всего придется выбирать не один файл, как это было в созданном ранее скрипте, а несколько.

3. Каждый раз запускать Renga нет необходимости, так как мы можем работая непосредственно с проектом, не закрывая Renga, открывать проект, сохранять его и закрывать.

Первое с чего мы начнем, выделим повторяющийся код. Это переименование файла, открытие проекта, сохранение проекта с новым именем и закрытие проекта. Как и любой другой язык программирования (как минимум большинство), PowerShell позволяет оформить такие повторяющиеся участки кода в виде функции. Для этого существует служебное слово function. Запишем функцию следующим образом: function ResaveRengaProject { }

Здесь function – служебное слово, а ResaveRengaProject -имя, которое мы ей присвоили. В фигурных скобках {} как раз и должен располагаться повторяющийся код.

Еще один важный момент – нам необходимо в функцию передавать имя файла, когда мы их будем перебирать по списку. Тогда запись будет выглядеть следующим образом:

function ResaveRengaProject {param ( [Parameter(Mandatory)] [string]$FileName)}

[Parameter(Mandatory)] – требует наличия параметра на входе в функцию. Так как мы не сможем выполнить функцию, если нам не передадут имя файла, мы потребуем наличия имени на входе. За это отвечает служебное слово Mandatory

[string]$FileName – мы указываем, что наш параметр должен быть строкой и называться FileName.

После объявления параметра необходимо вставить повторяющуюся часть скрипта. Окончательно наша функция будет записана следующим образом:

Далее идет известный нам по предыдущей части блок, отвечающий за открытие файлов:

Главное отличие этого блока от предыдущего в последних строках, а именно в том, что мы разрешили выбирать несколько файлов ($f.Multiselect = $true) и получаем уже не одно имя, а список имен файлов ($FNS = $f.FileNames).

Нам остается только открыть Renga, пройти по списку файлов, открыть, сохранить и закрыть каждый из них. Выглядеть это будем следующим образом:

Традиционный разбор по строкам.

  1. Запускаем Renga. Здесь для нас ничего нового нет.

2. Традиционный блок try – finally, который обеспечит закрытие Renga в случае ошибки при выполнении скрипта или функции

3. А вот тело скрипта разберем подробнее.

Чтобы пройти по списку файлов, мы вызовем встроенный в PowerShell цикл:

foreach ( $currentFilename in $FNS )

В данном цикле PowerShell проходит по списку $FNS, который мы получили из диалогового окна и на каждом шаге записывает в переменную $currentFilename – очередное имя файла.

Тело цикла обрамлено фигурными скобками, внутри которых мы и вызываем созданную нами функцию и не только:

write-host($currentFilename); - выводим на экран информацию о файле, который открываем;

ResaveRengaProject -FileName $currentFilename; - вызываем нашу функцию, указав, что параметру -FileName нужно передать значение переменной $currentFilename.

Таким образом, в цикле будет перебираться полученный список файлов, каждое имя файла будет передано в функцию, которая в свою очередь, откроет этот файл, сохранит его под именем с добавленным суффиксом «_new» и закроет проект.

Полный текст скрипта:

Нам остается только протестировать работу созданного нами скрипта, запустив его. Теперь у нас есть полезный инструмент, позволяющий быстро, без особых усилий открыть и сохранить все наши проекты в последнюю версию Renga.

Видео, демонстрирующее создание описанных выше скриптов.