Пакетный файл для изменения профилей питания - PullRequest
1 голос
/ 24 февраля 2020

Первый постер здесь. Я пытаюсь сделать быстрый скрипт для переключения между энергосберегающим и высокопроизводительным режимами питания, основываясь на том, подключен ли мой ноутбук. Я немного погуглил и придумал this , и так Я пытался изменить его в соответствии с моими потребностями. Тем не менее, кажется, что есть проблема в отношении заявления IF, я не могу заставить его работать по какой-то причине, которую я не могу понять. Сам по себе запуск функции checker работает просто отлично. Рад за любую помощь. Код включен ниже. (Для справки: if OnLine = true, затем устройство подключено к электросети)

@echo on
call :checker OnLine
if OnLine==true( powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c) else (powercfg /s e2ba9cbc-ad70-403c-8810-530a59af2d53)
pause

:checker 
set OnLine=false
set cmd=WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline
%cmd% | find /i "true" > nul && set %~OnLine=true
echo %OnLine%
EXIT /B 0

1 Ответ

1 голос
/ 24 февраля 2020

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

Это должно делать то, что вы хотите.

@echo off
WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline | findstr /i "TRUE" >nul && (echo powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c & echo online)
if %errorlevel% equ 1 (echo powercfg /s e2ba9cbc-ad70-403c-8810-530a59af2d53 & echo OffLine)

Это немного более длинная версия решения, если вы хотите echo Онлайн или офлайн.

WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline | findstr /I "TRUE"
if %errorlevel% equ 0 (
        echo Online
        powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
      ) else (
        echo Offline
        powercfg /s e2ba9cbc-ad70-403c-8810-530a59af2d53
  )

и просто чтобы показать вам, как выглядит ваше решение после того, как оно было исправлено:

@echo off
set onLine=
set mycmd=WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline
%mycmd% | findstr /i "TRUE"> nul && set onLine=true
echo %onLine%
if "%onLine%" == "true" (
      powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
    ) else (
      powercfg /s e2ba9cbc-ad70-403c-8810-530a59af2d53
)
exit /B 0

Чтобы лучше понять вышеприведенные команды, откройте cmd и введите следующее, чтобы прочитать их файлы помощи.

for /?
if /?
findstr /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...