目录

​1  源码​

​2  难点语法解析​

​::​

​enabledelayedexpansion​

​%~1​

​%%~xi​

​/a​

​goto :eof​

​/i​

​!var!​

​3  拓展学习​


1  源码

@echo off
setlocal enabledelayedexpansion
set count=10000
for /f "delims=" %%i in ('dir /b *.jpg,*.png,*.bmp,*.jpeg,*.gif,*.webp') do call:Rename "%%~i"
pause
exit

:Rename
set /a count+=1
if /i "%~1"=="!count:~1!%~x1" goto :eof
if exist "!count:~1!%~x1" goto Rename
echo 改名:%1 !count:~1!
ren "%~1" "!count:~1!%~x1"
goto :eof

2  难点语法解析

::

::  注释

enabledelayedexpansion

启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。

当参数以引号开头时,%~1会自动将引号删除。  ​​https://zhidao.baidu.com/question/1429823319385344259.html​

%%~xi

扩充%%i 到文件的扩展名。  ​

/a

是指定一个变量等于一串运算字符    ​​https://www.jb51.net/article/107289.htm​

goto :eof

运行 goto :eof 后,CMD 返回并将等待下一命令。 ​

/i

开关(如果指定)说明要进行的字符串比较不分大小写  ​​https://zhidao.baidu.com/question/550606651.html​

!var!

这是最后一种常见的变量形式,同时也是一种不太好理解的形式,需要记住一点,这种变量与延迟环境变量扩展有关  ​​

3  拓展学习

::  拓展学习 https://zhidao.baidu.com/question/140615925408016685.html
@echo off
setlocal enabledelayedexpansion
::设置文件
set file=key.txt

set skip=0
(for /f "tokens=1,2 delims= " %%a in ('type "%file%"') do (
set "str=%%~a %%~b"
if !skip! equ 1 (
echo !str!
) else (
if %%~b lss 5 (
set NowKey=%%~a
set /a count=%%~b+1
call echo %%str:%%~a %%~b=%%~a !count!%%
set skip=1
) else (
echo !str!
)
)
))>$NewKey$
move $NewKey$ "%file%" >nul
if defined NowKey (
echo 当前使用 Key 是:!NowKey! 次数:!count!
) else (
echo 当前文本中所有 Key 都已经达到使用次数。
)
pause