如何使此随机复制/粘贴/重命名功能在我的 Win10 批处理脚本中运行?

如何使此随机复制/粘贴/重命名功能在我的 Win10 批处理脚本中运行?

我正尝试强制 Windows 10 时常将登录/锁屏图片更改为我们自己公司的图片(企业品牌)。

以下目录包含 Microsoft 库存图像:

C:\Windows\Web\Screen
img100.jpg
img101.png
img102.jpg
img103.png
img104.jpg
img105.jpg

但简单地替换这些不会导致默认锁屏改变。您首先需要强制删除此目录中的内容,其中包含从上述位置复制过来的最后一个锁屏图像:C:\ProgramData\Microsoft\Windows\SystemData\S-1-5-18\ReadOnly\LockScreen_Z

我通过执行以下操作来实现这一点:

robocopy.exe /purge C:\tmp\empty C:\ProgramData\Microsoft\Windows\SystemData\S-1-5-18\ReadOnly\LockScreen_Z

我在以下位置拥有具有相同文件名的我自己的公司企业图像:

C:\Windows\Backgrounds\Lockscreen
img100.jpg
img101.png
img102.jpg
img103.png
img104.jpg
img105.jpg

我的计划是执行一项计划任务来清除以下内容:

C:\Windows\Web\Screen

然后清除以下内容:

C:\ProgramData\Microsoft\Windows\SystemData\S-1-5-18\ReadOnly\LockScreen_Z

然后我有以下脚本来随机选择一个文件并将其复制过来:

@echo off
setlocal EnableDelayedExpansion
cd C:\Windows\Backgrounds\Lockscreen
set n=0
for %%f in (*.*) do (
   set /A n+=1
   set "file[!n!]=%%f"
)
set /A "rand=(n*%random%)/32768+1"
copy "!file[%rand%]!" C:\Windows\Web\Screen

我遇到的问题是,无论我运行上述程序多少次,它总是会选择相同的文件进行一遍又一遍的复制。我不知道需要进行哪些更改才能真正随机工作?我还注意到,自定义锁屏只有在复制的文件重命名为 img100.jpg 时才会生效(似乎只想接受该文件名 - 不确定为什么)。我也不确定如何将复制的文件重命名为 img100.jpg 合并到脚本中。

有任何想法吗?

答案1

@echo off

setlocal EnableDelayedExpansion
cd /d "C:\Windows\Backgrounds\Lockscreen"

for /f %%i in ('dir *.* /b ^| find /v /c ""
')do set /a _rnd=!random!*(10%%i-100)/32768+100
copy /y *!_rnd!.* C:\Windows\Web\Screen & endlocal

在我的测试中,这是可行的,考虑到:

  1. 该文件夹仅包含您问题中列出的那些文件:
   C:\Windows\Backgrounds\Lockscreen\img100.jpg
   C:\Windows\Backgrounds\Lockscreen\img101.png
   C:\Windows\Backgrounds\Lockscreen\img102.jpg
   C:\Windows\Backgrounds\Lockscreen\img103.png
   C:\Windows\Backgrounds\Lockscreen\img104.jpg
   C:\Windows\Backgrounds\Lockscreen\img105.jpg
  1. 您的文件名布局在范围内100 - 105

  • 要复制文件并重命名到目标:
copy /y "*!_rnd!.*" C:\Windows\Web\Screen\img100.jpg & endlocal

  • 限制于*.png&*.jpg仅限文件:
@echo off

setlocal EnableDelayedExpansion
cd /d "C:\Windows\Backgrounds\Lockscreen"

for /f %%i in ('dir /b *.png *.jpg ^| find /v /c ""
')do set /a _rnd=!random! * (10%%i - 100) / 32768 + 100
copy /y /v "*!_rnd!.*" C:\Windows\Web\Screen\img100.jpg & endlocal

相关内容