![运行脚本后 PC 无法进入睡眠/唤醒状态](https://linux22.com/image/1553826/%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E5%90%8E%20PC%20%E6%97%A0%E6%B3%95%E8%BF%9B%E5%85%A5%E7%9D%A1%E7%9C%A0%2F%E5%94%A4%E9%86%92%E7%8A%B6%E6%80%81.png)
我受够了我的 PC 似乎以随机间隔从睡眠状态唤醒,并做了所有常规操作,禁用唤醒计时器、任务计划、禁止 LAN 和其他设备、运行 powercfg /sleepstudy 等,但无济于事。
我找到了一些禁用所有唤醒计时器的脚本并运行了它们:
Get-ScheduledTask | ? { $_.Settings.WakeToRun -eq $true -and $_.State -ne "Disabled"} | % { $_.Settings.WakeToRun = $false; Set-ScheduledTask $_ }
不幸的是,我还运行了一个脚本来禁止任何设备唤醒 PC,这似乎会暂停睡眠命令,直到按下按键然后将其完全关闭:
(/F "tokens=*" %A in ('powercfg -devicequery wake_armed') do powercfg -devicedisablewake "%A"
这会产生几个错误。
尽管我能理解其中的大部分内容,但我没有编程技能来编写脚本来纠正它:-(
这里有人可以帮忙吗?(目前无法恢复系统映像 - 我把我的备份驱动器+盒借给了一个不在家的朋友)(好吧 - 我是 Muppett)
编辑:
好的 - 我跑了
附注 C:\WINDOWS\system32>@echo off
对于/F“tokens=*”%%A 在('powercfg -devicequery wake_armed')中执行(powercfg -devicedisablewake“%%A”)
这给出了关键字“for”后缺少“(”的错误。因此,我输入了一个:
PS C:\WINDOWS\system32>@echo off for (/F “tokens=*” %%A 在 ('powercfg -devicequery wake_armed') 中执行 (powercfg -devicedisablewake “%%A” )。
这似乎有效,尽管我仍然不明白为什么,因为似乎有一个“(”太多了。
编辑 2 有没有办法逆转它?我可以直接替换吗-设备禁用唤醒和 -设备启用唤醒?
答案1
这会产生几个错误。
让我们一步一步地修复它。
> (/F "tokens=*" %A in ('powercfg -devicequery wake_armed') do powercfg -devicedisablewake "%A"
do was unexpected at this time.
第一个(
不应该在那里。
> /F "tokens=*" %A in ('powercfg -devicequery wake_armed') do powercfg -devicedisablewake "%A"
'/F' is not recognized as an internal or external command,
operable program or batch file.
for
開始時缺了個。
从命令行它将仅评估第一个结果,因此您需要使用批处理文件。
需要将批处理文件中的%
s 替换为s。%%
使用以下批处理文件:
@echo off
for /F "tokens=*" %%A in ('powercfg -devicequery wake_armed') do (
powercfg -devicedisablewake "%%A"
)
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 对于/f- 循环命令以执行另一个命令的结果。