@echo off
rem 关闭每一行命令的输出 “rem”是注释的意思
rem 延迟变量,这一点非常重要,尤其是复合语句必须开启,才能顺序执行用&连接或用()连接起来的各个分句
setlocal enabledelayedexpansion
rem echo 命令是输出,打印
echo delete annoying suffix of file name
for %%i in (*) do call :delete %%i
exit
:delete
rem 设置字符串的方法是 set stringName=string 注意等号两边没有空格!
set preName=%1
rem 设置整数变量 加/a 同样,等号两边没有空格,引用自定义的变量要用%myVariable%的方式,用%%把变量名包含进去
set /a num=1
set /a std=2
批处理文件怎么做rem 用:continue循环出名字的段数,这个相当于高级语言中的while循环
:continue
rem delims是分隔号,这里分隔号是_和. tokens是提取第几列,这里是提取%num%列,从1开始
for /f "delims=_. tokens=%num%" %%a in ("%preName%") do (
set /a num+=1
if %%a neq "" goto continue
)
set /a num=%num%-1
rem prefix用来存前缀 suffix用来存后缀
set /a pos=1
rem ( 必须写在命令所在行,不能写在下一行
if %num% leq %std% goto :eof
for /f "delims=_. tokens=%num%" %%a in ("%preName%") do set "suffix=%%a"
rem echo suffix=%suffix%
set /a num=%num%-1
rem echo num=%num%
rem 判断倒数第二个部分应该都是数字,用str接收,如果str全是数字,那么应该删除该后缀,否则不要改
set str=
for /f "delims=_. tokens=%num%" %%a in ("%preName%") do set "str=%%a"
echo %str%|findstr "[^0-9]" && goto :notDigit || goto :isDigit
:isDigit
goto :next
:notDigit
goto :eof
:next
set /a std2=1
set newname=
rem writeName循环用来把newname的前几项出来
:writeName
for /f "delims=_. tokens=%pos%" %%a in ("%preName%") do set prefix=%%a
if %pos% gtr %std2% set newname=%newname%_
set newname=%newname%%prefix%
set /a pos=%pos%+1
if %pos% lss %num% goto writeName
set newname=%newname%.%suffix%
rem echo preName=%preName%
rem echo newname=%newname%
rem ren是rename的意思,重命名 ren 的2个量一定要用变量的引用状态,ren %oldFileName% %newFileName%
ren %preName% %newname%
goto :eof

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。