找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24599|回复: 26

根据显示器大小设置桌面的批处理为何有的机器能运行,有的出错?

[复制链接]
发表于 2009-12-9 10:39:13 | 显示全部楼层 |阅读模式
@echo off
for /f "delims=" %%i in ('Wmic DesktopMonitor Get ScreenHeight^,ScreenWidth /Value') do set "%%i">nul 2>nul
if %ScreenWidth%==1280 (
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /d c:\tobacco1280.bmp /f
) else (
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /d c:\tobacco1024.bmp /f
)
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters


以上代码,在有的机器上运行成功,有的机器上运行提示“此时不应有 (”,请问如何解决。谢谢!

[ 本帖最后由 seasonsoft 于 2009-12-9 10:58 编辑 ]
发表于 2009-12-9 11:03:27 | 显示全部楼层
估计是有的机器上没有安装好wmic,还有windows2000上没有reg命令。
 楼主| 发表于 2009-12-9 11:05:02 | 显示全部楼层
操作系统方面都是XP没问题。WMIC怎么安装?
发表于 2009-12-9 11:13:50 | 显示全部楼层

回复 3楼 的帖子

在cmd中键入wmic回车
 楼主| 发表于 2009-12-9 11:56:08 | 显示全部楼层
如何加入到我的BAT里?
 楼主| 发表于 2009-12-9 14:43:53 | 显示全部楼层
经过检查,运行成功的机器上CMD里运行
for /f "delims=" %i in ('Wmic DesktopMonitor Get ScreenHeight^,ScreenWidth /Value') do set "%i">nul 2>nul
回显内容为:
1>nul 2>nul

1>nul 2>nul

1>nul 2>nul nHeight=1024

1>nul 2>nul nWidth=1280

1>nul 2>nul

1>nul 2>nul

而运行不成功的机器上CMD里运行同样一段代码的回显结果是
1>nul 2>nul

1>nul 2>nul

1>nul 2>nul nHeight=1024

1>nul 2>nul nWidth=1280

1>nul 2>nul

1>nul 2>nul

1>nul 2>nul nHeight=

1>nul 2>nul nWidth=

1>nul 2>nul

1>nul 2>nul
下面多了四行内容,变量似乎被清空了,请高手帮忙判断原因。谢谢
发表于 2009-12-9 15:56:54 | 显示全部楼层
你是设置桌面吧,你代码中的“%ScreenWidth%”是哪来的??

另外在写代码的时候最好规范点。。。
发表于 2009-12-9 16:06:56 | 显示全部楼层
报告,我在linux下执行,不成功。
尤其是那个reg, 找不到~  
(莫打我耶)

[ 本帖最后由 523066680 于 2009-12-9 16:11 编辑 ]
 楼主| 发表于 2009-12-9 17:07:08 | 显示全部楼层
这段代码是网上搜集的,在多数机器(XP系统)上运行可以通过,在少数电脑上出现问题。
发表于 2009-12-9 23:57:12 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1-2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenHeight^,ScreenWidth /Value') do (
  3.   if "%%i" equ "ScreenWidth" (
  4.     if "%%j" equ "1280" (
  5.       reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d c:\tobacco1280.bmp /f
  6.     ) else (
  7.       reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d c:\tobacco1024.bmp /f
  8.     )
  9.     RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
  10.     goto :eof
  11.   )
  12. )
复制代码
 楼主| 发表于 2009-12-10 08:19:38 | 显示全部楼层
10楼的方案经测试,执行的一直是else下的语句,即使if条件成立。
发表于 2009-12-10 09:49:55 | 显示全部楼层
既然在wmic中就直接获得了屏幕的宽度(好像得到的高度是没用的),那么接下来的操作就完全可以简化了:
  1. @echo off
  2. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth /Value') do (
  3.      reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d c:\tobacco%%i.bmp /f
  4.      RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
  5. )
复制代码
 楼主| 发表于 2009-12-10 10:04:02 | 显示全部楼层
12楼的我试过了,壁纸被改成了空白的,我加了echo %%i看了i的结果,运行结果如下:
C:\>test.bat
1280

操作成功结束

个人感觉好像是壁纸先被正确的改为了1280分辨率,但第二次循环的时候i成空了,壁纸成了tobacco.bmp
我是新手,请多多指教
发表于 2009-12-10 10:07:04 | 显示全部楼层

回复 13楼 的帖子

这样呢:
  1. @echo off
  2. for /f "tokens=2 delims==" %%i in ('Wmic DesktopMonitor Get ScreenWidth /Value') do (
  3.      reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d c:\tobacco%%i.bmp /f
  4.      RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
  5.      goto :eof
  6. )
复制代码
 楼主| 发表于 2009-12-10 10:14:10 | 显示全部楼层
我试了,注册表键值是正确改过来了的,但是桌面壁纸没有了,一块蓝板
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-5-13 22:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表