Задать вопрос
irikonova45
@irikonova45
Веб дизайнер

Как сделать cmd скрипт с меню?

Всем Доброго дня! Возникла необходимость сделать cmd(bat) скрипт, который делает следущее:
1 выводит меню с указанием схем питания (энергосберегающая, сбалансированная, высокопроизводительная)
2 ждет выбора несколько секунд (5-10), если ничего не выбрано - выбирает одну по умолчанию
3 печатает выбранную опцию и через несколько сек. завершает работу.
4 если возможно, хотелось бы отображение вариантов меню разным цветом.
Система windows10. Моих знаний оказалось слишком мало даже для того, чтобы вывести нормальное меню на русском. То нормально выводится на русском, то кракозябры печатаются:
echo "Выбор системы питания"
echo "ЭНЕРГОСБЕРЕГАЮЩАЯ"
echo "СБАЛАНСИРОВАННАЯ"
echo "ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ"

и как потом выбирать нужную схему питания?
  • Вопрос задан
  • 408 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
black1277
@black1277
Вольный стрелок
1(важно) создаете текстовый файл и сохраняете его в формате UTF-8 (без BOM)
2 открываете консоль win+R вводите cmd и жмете enter
3 вводите команду powercfg /L - получите список всех схем питания и самое главное - их идентификаторы
4 копируете код отсюда в текстовый файл и заменяете в строках с Powercfg -SETACTIVE айдишник на свои, полученные из предыдущего шага
@echo off
chcp 65001>nul

call :ECHO " --= Выбор системы питания =--" 0B
echo.
call :ECHO " E - ЭНЕРГОСБЕРЕГАЮЩАЯ" 0E
echo.
call :ECHO " S - СБАЛАНСИРОВАННАЯ" 0A
echo.
call :ECHO " V - ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ" 0D
echo.
call :ECHO " -----------------------------" 0B
echo.

call :ECHO " по умолчанию = " 0B
call :ECHO " ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ" 0C
echo.
call :ECHO " время для выбора " 0B
call :ECHO "7сек" 0C
echo.
CHOICE /T 7 /C ESV /D v /M "Сделайте выбор"

if %errorlevel% == 1 goto energo
if %errorlevel% == 2 goto sbalans
if %errorlevel% == 3 goto visoko

:energo
call :ECHO " -----------------------------" 0B
echo.
call :ECHO " выбрана" 0B
call :ECHO " ЭНЕРГОСБЕРЕГАЮЩАЯ" 0E
Powercfg -SETACTIVE a1841308-3541-4fab-bc81-f71556f20b4a
goto saz

:sbalans
call :ECHO " -----------------------------" 0B
echo.
call :ECHO " выбрана" 0B
call :ECHO " СБАЛАНСИРОВАННАЯ" 0A
Powercfg -SETACTIVE 381b4222-f694-41f0-9685-ff5bb260df2e
goto saz

:visoko
call :ECHO " -----------------------------" 0B
echo.
call :ECHO " выбрана" 0B
call :ECHO " ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ" 0D
Powercfg -SETACTIVE 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

:saz

echo.
echo " Завершение программы через 3 сек"
>nul timeout/nobreak 3
chcp 866>nul

exit /b
 
:ECHO
chcp 866>nul
 
for /f %%i in ('"prompt $h& for %%i in (.) do rem"') do (set Z=%%i)
pushd "%TEMP%" && (
    <nul>"%~1^" set /p="%Z%%Z%  %Z%%Z%"
    findstr /a:%2 . "%~1^*"
    del "%~1^"
    popd
    )
chcp 65001>nul
exit /b

В этой строке CHOICE /T 7 /C ESV /D v /M "Сделайте выбор" изменяйте на какие буквы будет реакция выбора 'ESV', а между /D и /M - какой выбор по умолчанию.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fzero0
@Fzero0
Вечный студент
66a8c275f0e45957351604.png
Зачем вам эта командная строка делайте сразу с UI на PowerShell
Add-Type -AssemblyName System.Windows.Forms

# Создание формы
$form = New-Object System.Windows.Forms.Form
$form.Text = "Выбор системы питания"
$form.Size = New-Object System.Drawing.Size(300, 200)
$form.StartPosition = "CenterScreen"
$form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
$form.MaximizeBox = $false

# Создание метки
$label = New-Object System.Windows.Forms.Label
$label.Text = "Выберите схему питания:"
$label.AutoSize = $true
$label.Location = New-Object System.Drawing.Point(10, 20)
$form.Controls.Add($label)

# Создание радиокнопок
$radioButton1 = New-Object System.Windows.Forms.RadioButton
$radioButton1.Text = "ЭНЕРГОСБЕРЕГАЮЩАЯ"
$radioButton1.AutoSize = $true
$radioButton1.Location = New-Object System.Drawing.Point(10, 50)
$form.Controls.Add($radioButton1)

$radioButton2 = New-Object System.Windows.Forms.RadioButton
$radioButton2.Text = "СБАЛАНСИРОВАННАЯ"
$radioButton2.AutoSize = $true
$radioButton2.Location = New-Object System.Drawing.Point(10, 75)
$radioButton2.Checked = $true
$form.Controls.Add($radioButton2)

$radioButton3 = New-Object System.Windows.Forms.RadioButton
$radioButton3.Text = "ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ"
$radioButton3.AutoSize = $true
$radioButton3.Location = New-Object System.Drawing.Point(10, 100)
$form.Controls.Add($radioButton3)

# Создание кнопки
$button = New-Object System.Windows.Forms.Button
$button.Text = "Выбрать"
$button.Location = New-Object System.Drawing.Point(10, 130)
$button.Add_Click({
    if ($radioButton1.Checked) {
        $selectedOption = "ЭНЕРГОСБЕРЕГАЮЩАЯ"
    } elseif ($radioButton2.Checked) {
        $selectedOption = "СБАЛАНСИРОВАННАЯ"
    } elseif ($radioButton3.Checked) {
        $selectedOption = "ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ"
    }
    [System.Windows.Forms.MessageBox]::Show("Выбрана схема питания: $selectedOption", "Результат")
    $form.Close()
})
$form.Controls.Add($button)



# Отображение формы
$form.Add_Shown({$form.Activate()})
[void]$form.ShowDialog()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы