【发布时间】:2021-10-14 08:16:56
【问题描述】:
我正在编写一个批处理文件来创建电源计划。最终目的是将其包含在设置中。但是当我运行安装程序时,批处理文件会卡住(安装程序 bat 文件没有暂停)。经过大量更改和阅读,我决定从头开始,我发现相同的批处理文件取决于文件夹(没有相对路径)。这些都是事实
我正在运行 Windows 10 专业版
文件 1:C:\Users\idoblas\Desktop\powerCFG\original\POWERCFG_ES.BAT 文件 2:C:\Users\idoblas\Desktop\powerCFG\POWERCFG_ES.BAT
这些是我的测试:
- 文件 2 是文件 1 的副本。两者具有相同的编码、文件大小......我 已经比较然后使用超越比较和winmerge
- 如果我双击文件 1,它可以正常工作(它会返回一个错误 要求管理员权限),如果我以管理员身份运行它 效果也很好
- 如果我双击文件 2,它会在暂停前卡在@第 6 行,但以管理员身份执行时可以正常工作,这是执行的最后一行:
FOR /F "tokens=6" %%G IN ('powercfg /getactivescheme') DO set activeschemeGUID=%%G
- 我已经更改了文件 2 的权限,让每个人都可以完全控制文件而无需更改
- 在其他文件夹中尝试过并像文件 1 一样工作,问题是在我的设置中,行为就像在文件 2 中一样
- 如果我从 cmd shell 运行 cmd.exe /k C:\Users\idoblas\Desktop\powerCFG\powercfg_es.bat 它可以工作,但如果我从 cmd 窗口执行批处理文件,它也会卡住
这里是代码:
REM @echo off
SETLOCAL
REM Get GUID of current power scheme
REM tokens = 6 for spanish OS, tokens = 4 fo english OS
FOR /F "tokens=6" %%G IN ('powercfg /getactivescheme') DO set activeschemeGUID=%%G
PAUSE
REM Custom power scheme name
set custom_name=Evolv_power_plan
PAUSE
REM Check if it already exists and if it exists, get its GUID
FOR /F "tokens=6" %%G IN ('powercfg -list ^| find "%custom_name%"') DO (
REM custom power scheme with that name already exists
set custom_GUID=%%G
goto :SetCustomActive
)
PAUSE
REM Here we're sure it doesn't exist: copy current active scheme and get GUID of that copy
FOR /F "tokens=6" %%G IN ('powercfg -DUPLICATESCHEME %activeschemeGUID%') DO set custom_GUID=%%G
PAUSE
REM change the name of the new scheme (the copy) to the custom name
powercfg -CHANGENAME %custom_GUID% %custom_name%
PAUSE
:SetCustomActive
powercfg -SETACTIVE %custom_GUID%
set activeschemeGUID=%custom_GUID%
PAUSE
REM Power settings allways ON
POWERCFG /CHANGE monitor-timeout-ac 0
POWERCFG /CHANGE monitor-timeout-dc 0
PAUSE
POWERCFG /CHANGE disk-timeout-ac 0
POWERCFG /CHANGE disk-timeout-dc 0
PAUSE
POWERCFG /CHANGE standby-timeout-ac 0
POWERCFG /CHANGE standby-timeout-dc 0
PAUSE
POWERCFG /CHANGE hibernate-timeout-ac 0
POWERCFG /CHANGE hibernate-timeout-dc 0
PAUSE
REM vISUALIZAR FAST STARTUP - HIBERNAR
powercfg /hibernate on
PAUSE
REM boton de power, QUE APAGUE
powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION 2
powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION 2
powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
PAUSE
rem mantener usb
powercfg -setacvalueindex %activeschemeGUID% 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg -setdcvalueindex %activeschemeGUID% 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
PAUSE
ENDLOCAL
PAUSE
提前感谢您的宝贵时间
【问题讨论】:
-
对于批处理文件 2,它是批处理文件目录中的唯一文件吗?该文件夹中不可能有另一个名为
powercfg的文件? -
您不能创建与系统可执行文件同名的批处理文件。将
powercfg.bat重命名为powerconfig.bat或类似的不作为可执行文件存在的东西。cmd将在当前工作目录中查找文件,然后再查看环境路径。在这种情况下,它会找到powercfg.bat本地并且不会执行位于C:\Windows\System32中的powercfg.exe,但建议不要在脚本中使用完整路径。即FOR /F "tokens=6" %%G IN ('C:\Windows\System32\powercfg.exe /getactivescheme') DO set activeschemeGUID=%%G -
感谢您的回答! @Squashman 这就是问题所在!非常感谢!!!
-
@Gerhard 谢谢,我会更改文件名
标签: batch-file