[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 mzzyb 于 2023-1-14 12:00 编辑

2种解决方案,
第一种:把上面4条命令单独做成4个bat文件,你单击相应的就能实现相应的效果
第二种:做成1个bat文件,有交互,代码如下:
  1. @echo off
  2. :start
  3. set /P a=(仅电脑屏幕输入1)(复制屏幕输入2)(扩展屏幕输入3)(仅第二屏幕输入4)
  4. if "%a%"=="1" cls & goto 1
  5. if "%a%"=="2" cls & goto 2
  6. if "%a%"=="3" cls & goto 3
  7. if "%a%"=="4" cls & goto 4
  8. :1
  9. displayswitch /internal
  10. pause>nul
  11. goto start
  12. :2
  13. displayswitch /clone
  14. pause>nul
  15. goto start
  16. :3
  17. displayswitch /exten
  18. pause>nul
  19. goto start
  20. :4
  21. displayswitch /external
  22. pause>nul
  23. goto start
复制代码
刚认真看了你的需求,应该要结合一下下面的命令:
  1. color 0a
  2. title 硬件检测
  3. mode con cols=90
  4. sc config winmgmt start= auto >nul 2<&1
  5. net start winmgmt 2>1nul
  6. setlocal ENABLEDELAYEDEXPANSION
  7. set tee=0
  8. for /f "tokens=1,* delims==" %%a in ('wmic DESKTOPMONITOR get name^,ScreenWidth^,ScreenHeight^,PNPDeviceID /value') do (
  9. set /a tee+=1
  10. if "!tee!" == "3" echo 类 型 = %%b
  11. if "!tee!" == "4" echo 其他信息 = %%b
  12. if "!tee!" == "5" echo 屏幕高 = %%b
  13. if "!tee!" == "6" echo 屏幕宽 = %%b
  14. )
  15. set tee=0
  16. echo.
  17. pause
复制代码
但是bat只运行1次,所以要想办法让它一直运行检测,但是这样会小号系统资源。

TOP

我很好奇,你为什么不用快捷键win+p调出投影选项呀~~这样可能会更省事

TOP

我写的第一段可以实现,就是不能自行判断,要你手动选择一下。如果要自行判断,你先外接一个显示器,执行一下第二种方法下面那段代码发我看下,我没有双显示器,没办法测试,在第二种方法下面加个计数器,在最后面做一下判断这个计数器的数值,就可以实现自行判断,而且语法可以缩短

TOP

我完成了,你试试
  1. color 0a
  2. title 硬件检测
  3. mode con cols=90
  4. sc config winmgmt start= auto >nul 2<&1
  5. net start winmgmt 2>1nul
  6. setlocal ENABLEDELAYEDEXPANSION
  7. set tee=0
  8. set loop=10
  9. for /f "tokens=1,* delims==" %%a in ('wmic DESKTOPMONITOR get name^,ScreenWidth^,ScreenHeight^,PNPDeviceID /value') do (
  10. set /a tee+=1
  11. if "!tee!" == "3" echo 类 型 = %%b
  12. if "%%b" == "" set /a loop -=1
  13. )
  14. if %%loop == 3 goto 1
  15. if %%loop == 4 goto 2
  16. :1
  17. displayswitch /internal
  18. pause>nul
  19. :2
  20. displayswitch /extend
  21. pause>nul
  22. pause
复制代码

TOP

本帖最后由 mzzyb 于 2023-1-17 15:12 编辑

回复 9# bcetl


    我只有1个显示器的情况下是没问题的。
试试第五行改成,net start winmgmt 2>1 nul
忘了说了,你要以管理员的身份运行这个脚本

重新改了下,试试下面这个~
  1. color 0a
  2. title 硬件检测
  3. mode con cols=90
  4. sc config winmgmt start= auto >nul 2<&1
  5. net start winmgmt >nul 2>&1
  6. setlocal ENABLEDELAYEDEXPANSION
  7. set tee=0
  8. set loop=10
  9. for /f "tokens=1,* delims==" %%a in ('wmic DESKTOPMONITOR get name^,ScreenWidth^,ScreenHeight^,PNPDeviceID /value') do (
  10. set /a tee+=1
  11. if "!tee!" == "3" echo 类 型 = %%b
  12. if "%%b" == "" set /a loop -=1
  13. )
  14. echo %loop%
  15. if %loop% == 5 goto 1
  16. if %loop% == 6 goto 2
  17. :1
  18. displayswitch /internal
  19. pause>nul
  20. :2
  21. displayswitch /extend
  22. pause>nul
  23. pause
复制代码

TOP

回复 11# Batcher


    谢谢老大的指点,我是名86后,见证了论坛的兴起和没落,很庆幸,BAT没有死。这里,我学到了很多。

TOP

本帖最后由 mzzyb 于 2023-1-29 11:49 编辑

回复 14# bcetl


    我这边没问题,你把运行的界面复制上来我看下。需要接两台显示的状态下,因为我只接1台显示器的时候,我看到它执行对了,应该要改下细节参数

TOP

返回列表