我正在尝试运行一个脚本来更改 Windows 10 的默认壁纸,因为我将向所有客户端部署 Win10。当我运行下面的批处理代码时,它不会更改默认壁纸。我看到 img0 文件位于正确的目录 C:\Windows\Web\Wallpaper\Windows 中,但它没有更改背景。下面的代码是我正在使用的代码。当我尝试删除 C:\Windows\Web\4K\Wallpaper\Windows\img0_1366x768.jpg 时,我确实收到一些访问被拒绝错误,访问被拒绝。
takeown /f c:\windows\WEB\wallpaper\Windows\img0.jpg
takeown /f C:\Windows\Web\4K\Wallpaper\Windows\*.*
icacls c:\windows\WEB\wallpaper\Windows\img0.jpg /Grant System:(F)
icacls C:\Windows\Web\4K\Wallpaper\Windows\*.* /Grant System:(F)
del c:\windows\WEB\wallpaper\Windows\img0.jpg
del /q C:\Windows\Web\4K\Wallpaper\Windows\*.*
copy %~dp0img0.jpg c:\windows\WEB\wallpaper\Windows\img0.jpg
copy %~dp04k\*.* C:\Windows\Web\4K\Wallpaper\Windows
你知道我做错了什么吗?TIA
C:\Users\Administrator\Desktop\ReplaceWallpaper>(
Takeown.exe /F "C:\WINDOWS\Web\" /R /D S
Icacls.exe "C:\WINDOWS\Web\" /Grant "Administrator":"F" /T
Del /Q "C:\WINDOWS\Web\wallpaper\Windows\img0.jpg"
Copy "C:\Users\Administrator\Desktop\ReplaceWallpaper\img0.jpg" "C:\WINDOWS\Web\wallpaper\Windows\img0.jpg"
REG ADD "HKCU\Control Panel\Desktop" /V "Wallpaper" /T "REG_SZ" /D "C:\WINDOWS\Web\wallpaper\Windows\img0.jpg" /F
) 1>Nul
ERROR: File or Directory not found.
C:\WINDOWS\Web" /Grant Administrator:F /T: The filename, directory name, or volume label syntax is incorrect.
答案1
您在命令中设置的用户名Icacls
错误,您应该以管理员身份运行,最好使用隐藏内置管理员帐户如果用户访问被拒绝,请使用您的用户名。
其次,确保在注册表项中设置Wallpaper
当前用户的注册表值,HKEY_CURRENT_USER\Control Panel\Desktop
该注册表值指向其当前壁纸。
请注意,在 Batch 等受限语言下需要注销/重新启动,因为它无法通知系统环境更新。
尝试这个:
Set "oldWall=%WinDir%\Web\wallpaper\Windows\img0.jpg"
Set "newWall=%~dp0img0.jpg"
Set "WallPath=%WinDir%\Web\Windows\"
(
Takeown.exe /F "%WallPath%" /R /D S
Icacls.exe "%WallPath%" /Grant "%username%":"F" /T
Del /Q "%oldWall%"
Copy "%newWall%" "%oldWall%"
REG ADD "HKCU\Control Panel\Desktop" /V "Wallpaper" /T "REG_SZ" /D "%oldWall%" /F
)1>Nul
但如果你的目的是部署带有自定义壁纸集的 Windows ISO,那么首选解决方案是使用 WSIM (Windows 系统映像管理器),包含在 WAIK 中(Windows 自动安装套件)或也称为 WADK(Windows 评估和部署工具包),这样你就可以生成一个自动无人值守文件ISO 中应包含一个与 setup.exe 文件一起发送的文件,这样您可以在安装 Windows 时修改各种默认值,例如所有用户的默认壁纸。
答案2
以下是针对您上述内容的修复以及一些建议。底部是无需重启即可更新壁纸的解决方案。
产生的错误:“错误:未找到文件或目录。” 错误产生代码:Takeown.exe /F“C:\WINDOWS\Web\”/R /DS 修复:Takeown.exe /F“C:\WINDOWS\Web”/R /DY
解释:/D 后面必须跟 Y(表示是)或 N(表示否)。Takeown 有一个错误,因此不允许使用尾随反斜杠,除非后面跟有 FileSpec/Wildcard 标记 *
非错误产生的错误:使用 ICacls 添加权限时,管理员应该是管理员,除非您创建了一个带有字符串“Administrator”的用户名,但请按照 ElektroStudios 上面的说明并使用当前用户。
允许当前用户访问系统文件并不是一个好主意,因为您正在改变系统的安全性。因此,您最初的想法是允许管理员组访问这些文件,这是正确的。
脚本样式错误:您不应该删除壁纸文件,因为您几乎无法让此脚本运行。在此之前,您应该尝试通过脚本完成任务,而不会破坏操作系统上的文件。这只是编写脚本时的一个好习惯,这样您就不会破坏计算机或改变其安全状态。通过更改壁纸,您可能会让病毒进入您的计算机,具体取决于您从哪里获取壁纸。
以下是如何使脚本工作。摘自 Rob Vanderwoude Script SetWallp.bat,他感谢 Pete Smith 使用 RUNDLL32 命令激活更改。http://www.robvanderwoude.com/sourcecode.php?src=setwallp_nt
激活更改 RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1 True
答案3
截至撰写本文时(根据我的经验),更频繁的设置HKCU\Control Panel\Desktop
是行不通的。
最好的解决方案是调用 win32 api 函数SystemParametersInfoSetWallpaper
- 每次都能成功。我发现这个 powershell 模块/代码片段非常有用https://gallery.technet.microsoft.com/scriptcenter/Change-window-borderdesktop-609a6fb2