В этой статье описано как создавать, редактировать, выполнять и сохранять скрипты в области скриптов.
Создание и выполнение сценариев
В области скриптов можно открывать и редактировать файлы Windows PowerShell. Сейчас нас интересуют следующие типы файлов Windows PowerShell: файлы скриптов ( .ps1 ), файлы данных скриптов ( .psd1 ) и файлы модулей скриптов ( .psm1 ). Эти типы файлов имеют цветовую подсветку синтаксиса в редакторе области сценариев. Другие стандартные файлы, которые можно открыть в области сценариев, — это файлы конфигурации ( .ps1xml ), XML-файлы и текстовые файлы.
Политика выполнения Windows PowerShell определяет, можно ли выполнять сценарии, загружать профили Windows PowerShell и файлы конфигурации. Политика выполнения по умолчанию, Restricted, запрещает выполнение сценариев и блокирует загрузку профилей. Чтобы изменить эту политику выполнения и разрешить загрузку и использование профилей, см. описание Set-ExecutionPolicy и about_Signing.
Создание файла сценария
Нажмите кнопку Создать на панели инструментов или откройте меню Файл и выберите Создать. Созданный файл появится на вкладке «Новый файл» под текущей вкладкой PowerShell. Помните, что вкладки PowerShell отображаются, только если их несколько. По умолчанию создается файл сценария ( .ps1 ), но его можно сохранить с новым именем и расширением. На одной вкладке PowerShell может быть создано несколько файлов сценариев.
Нейросеть пишет скрипты для роблокса #shorts
Открытие существующего сценария
Нажмите кнопку Открыть. на панели инструментов или откройте меню Файл и выберите пункт Открыть. В диалоговом окне Открыть выберите файл, который требуется открыть. Открытый файл появится в новой вкладке.
Закрытие вкладки сценария
На вкладке файла, которую нужно закрыть, щелкните значок закрытия (X) или откройте меню File (Файл) и выберите Close (Закрыть).
Если файл был изменен с момента последнего сохранения, будет предложено сохранить или отменить изменения.
Отображение пути к файлу
На вкладке файла наведите курсор на его имя. Появится подсказка с полным путем к файлу сценария.
Запуск сценария
Нажмите кнопку Выполнить сценарий на панели инструментов или откройте меню Файл и выберите пункт Выполнить.
Выполнение части сценария
- Выберите часть сценария в области сценариев.
- Нажмите кнопку Выполнить выделенный фрагмент на панели инструментов или откройте меню Файл и выберите пункт Выполнить выделенный фрагмент.
Остановка выполняемого сценария
Есть несколько способов остановить выполняемый скрипт.
- На панели инструментов щелкните Остановить операцию.
- Нажмите CTRL + BREAK .
- В меню Файл выберите Остановить операцию.
Нажатие клавиш CTRL + C также сработает, если нет выделенного текста. В противном случае нажатие клавиш CTRL + C приведет к копированию выделенного текста.
Написание и редактирование текста в области сценариев
В области скриптов текст можно копировать, вырезать, вставлять, искать и заменять. Также можно отменить и повторить последнее выполненное действие. Для этого используются те же клавиши, как и во всех других приложениях Windows.
Как создавать скрипты в Windows | удобный конструктор с графическим интерфейсом
Ввод текста в области сценариев
- Установите курсор в область сценариев, щелкнув кнопкой мыши любую ее часть или выбрав пункт Перейти в область сценариев в меню Вид.
- Создайте сценарий. Цветовая подсветка синтаксиса и заполнение нажатием клавиши TAB обеспечивают более широкие возможности для редактирования в интегрированной среде скриптов Windows PowerShell.
- Подробную информацию о заполнении нажатием клавиши TAB, помогающем при вводе кода, см. в статье How to Use Tab Completion in the Script Pane and Console Pane (Использование заполнения нажатием клавиши TAB в областях сценариев и консоли).
Поиск текста в области сценариев
- Чтобы найти текст в любой части скрипта, нажмите клавиши CTRL + F или выберите Find in Script (Найти в сценарии) в меню Edit (Правка).
- Чтобы найти текст после курсора, нажмите клавишу F3 или выберите Найти следующее в сценарии в меню Правка.
- Чтобы найти текст до курсора, нажмите клавиши SHIFT + F3 или выберите Find Previous in Script (Найти предыдущее в сценарии) в меню Edit (Правка).
Поиск и замена текста в области сценариев
Нажмите клавиши CRTL + H или в меню Edit (Правка) выберите Replace in Script (Заменить в сценарии). Введите текст, который нужно найти, и замещающий текст, затем нажмите клавишу ВВОД .
Переход к определенной строке текста в области сценариев
- В области сценариев нажмите клавиши CTRL + G или выберите Go to Line (Перейти к строке) в меню Edit (Правка).
- Введите номер строки.
Копирование текста в области сценариев
- В области сценариев выделите текст, который требуется скопировать.
- Нажмите клавиши CTRL + C , щелкните значок Copy (Копировать) на панели инструментов или выберите Copy (Копировать) в меню Edit (Правка).
Вырезание текста в области сценариев
- В области сценариев выделите текст, который требуется вырезать.
- Нажмите клавиши CTRL + X , щелкните значок Cut (Вырезать) на панели инструментов или выберите Cut (Вырезать) в меню Edit (Правка).
Вставка текста в области сценариев
Нажмите клавиши CTRL + V , щелкните значок Paste (Вставить) на панели инструментов или выберите Paste (Вставить) в меню Edit (Правка).
Отмена действия в области сценариев
Нажмите клавиши CTRL + Z , щелкните значок Undo на панели инструментов или выберите Отменить в меню Правка.
Повторное выполнение действия в области сценариев
Нажмите клавиши CTRL + Y , щелкните значок Повторить на панели инструментов или выберите Повторить в меню Правка.
Сохранение сценария
Звездочка рядом с именем скрипта обозначает, что файл не был сохранен после изменения. После сохранения звездочка исчезает.
Сохранение сценария
Нажмите клавиши CTRL + S , щелкните значок Сохранить на панели инструментов или выберите Сохранить в меню Файл.
Сохранение сценария с определенным именем
- В меню Файл выберите пункт Сохранить как. Появится диалоговое окно Сохранить как.
- В поле Имя файла введите имя файла.
- В поле Тип файла выберите тип файла. Например, в поле Тип сохраняемого файла выберите «Скрипты PowerShell ( *.ps1 )».
- Нажмите Сохранить.
Сохранение сценария в кодировке ASCII
По умолчанию интегрированная среда сценариев Windows PowerShell сохраняет новые файлы скриптов ( .ps1 ), файлы данных скриптов ( .psd1 ) и файлы модулей скриптов ( .psm1 ) в кодировке Юникод (BigEndianUnicode). Чтобы сохранить сценарий в другой кодировке, например ASCII (ANSI), используйте методы Save или SaveAs объекта $psISE.CurrentFile.
Следующая команда сохраняет новый сценарий в кодировке ASCII и с именем MyScript.ps1:
$psISE.CurrentFile.SaveAs(«MyScript.ps1», [System.Text.Encoding]::ASCII)
Следующая команда заменяет текущий файл сценария на файл с таким же именем, но в кодировке ASCII:
$psISE.CurrentFile.Save([System.Text.Encoding]::ASCII)
Следующая команда возвращает кодировку текущего файла:
$psISE.CurrentFile.encoding
Интегрированная среда скриптов Windows PowerShell поддерживает следующие параметры кодировки: ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8 и Default. Значение параметра Default зависит от системы.
Интегрированная среда скриптов Windows PowerShell не изменяет кодировку файлов скриптов при использовании команд «Сохранить» или «Сохранить как».
См. также:
Источник: learn.microsoft.com
Добавление скриптинга в программу с помощью Lua
Lua это мощный, быстрый, легкий, встраиваемый язык сценариев. С его помощью можно легко и быстро добавить поддержку скриптинга в вашу программу.
Это может понадобиться в тех случаях, когда вы хотите дать возможность пользователям производить самостоятельную донастройку (кастомизацию) вашей программы, когда вы не хотите перекомпилировать весь проект, при внесении каких-либо изменений в логику работы программы, либо хотите разделить работу над движком и работу над логикой между разработчиками (например, при написании игр).
В этой статье, с помощью простой программы, я хочу показать пример встраивания Lua в ваш проект.
Примеров программ, которые используют Lua достаточно много. Далеко не полный список программ, использующих Lua, можно посмотреть здесь Lua Wiki и здесь Wikipedia
Я приведу пример простой программы, которая принимает в качестве аргументов путь к директории, перечисляет файлы и подкаталоги, передает их в скрипт. Скрипт, с помощью регулярных выражений ищет соответствие в путях, передаваемых файлов и, если находит, переименовывает файл согласно определенным правилам.
Пример я создавал в Visual Studio под Windows. Несмотря на это, приведенный код, за исключением нескольких функций (перечисление файлов, переименование файла), специфичных для Windows, после небольшой адаптации будет работать и на других платформах, т.к. Lua является кроссплатформенным языком сценариев.
Начнем с того, что посетим официальный сайт и скачаем Lua для своей платформы. Для Windows подойдет вот этот архив, включающий в себя библиотеки линковщика, динамические библиотеки и заголовочные файлы Lua.
Распаковываем, указываем в настройках Visual Studio пути к заголовочным файлам и библиотекам линковщика (Tools -> Options -> Projects and Solutions -> VC++ Directories).
- Добавление в проект заголовочных файлов и библиотеки компоновщика
- Инициализация виртуальной машины Lua
- Реализация и регистрация экспортируемых функций
extern «C»
#include
#include
#include
>
Почему extern «C»? Lua написан на ANSI C, если попытаться включить файлы без extern «C» то мы получим множество ошибок, таких как:
Это вызвано тем, что соглашения о вызовах в C отличаются от соглашений в C++.
Не забудем подключить библиотеку линковщика:
#pragma comment (lib, «lua51.lib»)
Теперь необходимо объявить и инициализировать экземпляр Lua интерпретатора.
int _tmain( int argc, _TCHAR* argv[])
// Инициализируем экземпляр
g_LuaVM = lua_open();
.
// Закрываем
lua_close(g_LuaVM);
>
Теперь нам необходимо объявить и реализовать две функции, которые будут вызываться из Lua. Первая будет искать соответствие имени файла регулярному выражению:
int LuaMatchString(lua_State *luaVM)
Вторая — переименовывает файл:
int LuaRenameFile(lua_State *luaVM)
Остановимся подробнее на реализации второй:
// В качестве параметров принимает текущий путь к файлу и новое имя файла
// В случае успеха возвращает 1, иначе 0
int LuaRenameFile(lua_State *luaVM)
// Получаем число переданных из Lua скрипта аргументов
int argc = lua_gettop(luaVM);
// Если аргументов меньше двух — возвращаем ошибку
if (argc < 2)
cerr // Вернем 0 в Lua скрипт
lua_pushnumber(luaVM, 0);
// Количество возвращаемых значений
return 1;
>
// Проверяем типы аргументов, если это не строки
// возвращаем 0 (признак ошибки)
if (!lua_isstring(luaVM, 1) || !lua_isstring(luaVM, 2))
cout lua_pushnumber(luaVM, 0);
// Количество возвращаемых значений
return 1;
>
// Получаем значение первого аргумента, путь к файлу
// Обратите внимание — индекс первого элемента — 1, а не 0, как принято в С++
string strSource = lua_tostring(luaVM, 1);
// Получаем значение второго аргумента, новое имя файла
string strDestination = lua_tostring(luaVM, 2);
strDestination = strSource.substr(0, strSource.rfind(‘\’) + 1) + strDestination;
int nResult = ( int )::MoveFileEx(strSource.c_str(), strDestination.c_str(), MOVEFILE_REPLACE_EXISTING|MOVEFILE_WRITE_THROUGH);
// Возвращаем в Lua скрипт результат выполнения MoveFileEx
lua_pushnumber(luaVM, nResult);
// Количество возвращаемых значений
return 1;
>
Как видно — ничего сложного: проверяем количество переданных аргументов, проверяем тип аргументов, извлекаем, выполняем переименование файла и возвращаем результат.
Теперь нам необходимо дать Lua знать, о экспортируемых функциях, делается это просто:
lua_register(g_LuaVM, «RenameFile», LuaRenameFile);
lua_register(g_LuaVM, «MatchString», LuaMatchString);
RenameFile и MatchString это имена функций, которые будут «видны» в скрипте.
Создадим скрипт, выполняющий всю работу:
— Вызывается для обработки имени файла
— В качестве параметра передается полный путь к файлу
— и да, — это комментарии в Lua
function onFileFound(fileName)
patt = MatchString(‘103([0-9]).txt’, fileName)
— Если совпадение найдено patt будет содержать
— найденно совпадение — ([0-9])
— иначе nil
if patt ~= nil then
— Переименовываем файл, заменяя 103 на XXX
— Пример: было 103180998.txt, станет XXX180858.txt
RenameFile(fileName, ‘XXX’ .. patt .. ‘.txt’)
end
end
Чтобы совсем стало понятно, привожу кусок кода, который вызывает эту функцию
// Переместить на начало стека функцию onFileFound
lua_getglobal(g_LuaVM, «onFileFound»);
// Поместить следующим элементом в стек путь к найденному файлу (fileName в скрипте)
lua_pushstring(g_LuaVM, strFilePath.c_str());
// Вызвать функцию onFileFound
if (lua_pcall(g_LuaVM, 1, 0, 0) != 0)
// Проверить возвращенное значение,
// если это не 0, сообщить об ошибке
// lua_tostring(g_LuaVM, -1) содержит описание ошибки
cerr >
Осталось только загрузить скрипт из нашей программы:
BOOL LoadScript()
// Получение полного пути к скрипту
CHAR szScriptPath[1024] = ;
GetModuleFileName(NULL, szScriptPath, _countof(szScriptPath) — 1);
TCHAR *szSlashPos = strrchr(szScriptPath, ‘\’);
if (szSlashPos != NULL)
szScriptPath[szSlashPos — szScriptPath + 1] = ‘