使用批处理复制windows10自动更新的锁屏壁纸

Windows10家庭版系统每次启动笔记本时经常发现有些锁屏壁纸非常好,有风景还配文字,于是想做个批处理把喜欢的背景图做个备份,并根据文件名和大小判断是否同一文件防止重复备份或覆盖

PS:锁屏界面看到好的背景图一定要在启动后尽快备份(几十秒),因为这时系统会联网更新下一张图并覆盖原有图片!!!

PS(2020-06-29):添加了传参,输入jpg.bat start后打开图片目录

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

if "%1" == "start" (
start %userprofile%Desktop背景图片
rem echo %0 输出bat文件本身
rem echo %1 输出第一个参数,这里就是输入的start
rem echo %2 后面依次
rem echo %3
rem echo %4
exit
)

rem 使用当前日期和时间的组合位作为文件名,并判断是否在0点到9点,因为这时时间首位为空
set time_first_bit="%time:~0,1%"
if %time_first_bit% == " " (
    set name=%date:~0,4%%date:~5,2%%date:~8,2%_0%time:~1,1%%time:~3,2%
    ) else (
    set name=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%
    )


rem 先取当前锁屏图片的文件大小并赋值
for /f "delims=" %%a in ("%windir%webscreenimg105.jpg") do set size1=%%~za

rem 下面的if exist后面的文件名如果有空格时需要用双引号括起来,否则会以文件名中的空格进行分割来执行命令
rem 变量赋值中防止空格时可以在调用变量时加引号,不用在变量值中加引号,比如调用时用"%a%"而不用a="1 2 3"
if exist "%userprofile%Desktop背景图片\%name%.jpg" (
    rem 取已有的同名文件大小并赋值
    for /f "delims=" %%a in ("%userprofile%Desktop背景图片\%name%.jpg") do set size2=%%~za
    
    rem 比较文件大小  
    if !size1! == !size2! (
        echo 已存在相同大小的同名文件,不需备份!!!) else (
            echo 存在同名文件,但是大小不相同,准备备份!
            
            rem ren命令的目标文件名只能是文件名,不能有路径!!!
            ren "%userprofile%Desktop背景图片\%name%.jpg" "%name%bak.jpg"
            copy "%windir%webscreenimg105.jpg" "%userprofile%Desktop背景图片\%name%.jpg"
            echo 图片备份成功!!!)

) else (
echo 文件不存在,准备备份!
copy "%windir%webscreenimg105.jpg" "%userprofile%Desktop背景图片\%name%.jpg"
echo 图片备份成功!!!
)

参考:

[BATCH]DOS批处理--根据当前日期和时间来创建文件夹和文件名_运维_champwang-CSDN博客 https://blog.csdn.net/champwang/article/details/47857477 

批处理中setlocal enabledelayedexpansion的作用详细整理_DOS/BAT_脚本之家 https://www.jb51.net/article/29323.htm

奶奶问孙子:4+1等于几 孙子说:等于6-1。 奶奶说:你明明知道答案,为什么不说? 孙子说:年轻人不讲5的……..
原文地址:https://www.cnblogs.com/jasy/p/12824881.html