学习心得:一键互切「仅电脑屏幕 / 仅第二屏幕」BAT脚本

日期:2026-09-30 | 分类:Windows批处理脚本

需求背景

日常外接显示器,需要一键在【仅电脑屏幕】和【仅第二屏幕】之间来回切换。不想每次按 Win+P 调出投影面板手动选择,希望双击程序直接完成切换。

尝试过读取WMI获取系统当前投影状态,但部分Windows版本WMI类不存在,会报错「无效类」。因此改用本地临时文件记录上一次操作状态的思路实现切换。

完整BAT脚本源码

@echo off
setlocal
set "STATE_FILE=%temp%\display_state.txt"
set "state=PC"
if exist "%STATE_FILE%" set /p state=<"%STATE_FILE%"
if /i "%state%"=="PC" (
    >"%STATE_FILE%" echo EXT
    DisplaySwitch.exe 4
) else (
    >"%STATE_FILE%" echo PC
    DisplaySwitch.exe 1
)
endlocal

脚本原理拆解

✅ 优点

⚠️ 核心缺陷(重点记录)

脚本不会读取Windows真实屏幕状态,只记忆上一次点击脚本时的标记!

如果中途手动按 Win+P 去切换投影模式,脚本里保存的标记和系统真实状态就会错位,再次点击脚本时会出现“点击无效”的现象。

适用前提:屏幕切换只使用这个bat脚本,不手动Win+P干预。

使用步骤

  1. 新建文本文档,粘贴代码;
  2. 另存为:屏幕切换.bat,保存类型选【所有文件】,编码ANSI;
  3. 双击运行,即可一键互切;
  4. 进阶:右键bat创建快捷方式,在快捷方式属性设置快捷键,实现全局一键切换。我使用的是Ctrl+Alt+P快捷键。

总结

这个方案属于状态记忆型切换,牺牲了“读取系统真实状态”能力,换取极高兼容性,解决WMI查询失败的坑。适合固定只用脚本切换显示器的场景;如果会手动Win+P调整投影,这个方案就容易状态错乱,需要改用两个独立bat分开绑定快捷键。