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

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

@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 编辑 ]

估计是有的机器上没有安装好wmic,还有windows2000上没有reg命令。
***共同提高***

TOP

操作系统方面都是XP没问题。WMIC怎么安装?

TOP

回复 3楼 的帖子

在cmd中键入wmic回车
***共同提高***

TOP

如何加入到我的BAT里?

TOP

经过检查,运行成功的机器上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
下面多了四行内容,变量似乎被清空了,请高手帮忙判断原因。谢谢

TOP

你是设置桌面吧,你代码中的“%ScreenWidth%”是哪来的??

另外在写代码的时候最好规范点。。。

TOP

报告,我在linux下执行,不成功。
尤其是那个reg, 找不到~  
(莫打我耶)

[ 本帖最后由 523066680 于 2009-12-9 16:11 编辑 ]

TOP

这段代码是网上搜集的,在多数机器(XP系统)上运行可以通过,在少数电脑上出现问题。

TOP

  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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

10楼的方案经测试,执行的一直是else下的语句,即使if条件成立。

TOP

既然在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. )
复制代码
***共同提高***

TOP

12楼的我试过了,壁纸被改成了空白的,我加了echo %%i看了i的结果,运行结果如下:
C:\>test.bat
1280

操作成功结束

个人感觉好像是壁纸先被正确的改为了1280分辨率,但第二次循环的时候i成空了,壁纸成了tobacco.bmp
我是新手,请多多指教

TOP

回复 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. )
复制代码
***共同提高***

TOP

我试了,注册表键值是正确改过来了的,但是桌面壁纸没有了,一块蓝板

TOP

返回列表