批量删除文件名中的相同字符串

win 篇

在需要批量修改文件名的文件夹下创建批处理文件(.bat),写入以下代码,运行即可

1
2
3
@echo off& setlocal enabledelayedexpansion
for /f "delims=" %%1 in ('dir /a /b') do (set wind=%%1
ren "%%~1" "!wind:副本=!")
  1. @echo off :其中echo off表示关闭命令回显,加上@表示连同echo off一起不回显

  2. setlocal enabledelayedexpansion : 设置本地为延迟扩展。其实也就是:延迟变量,全称”延迟环境变量扩展”,在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。

    什么是变量的延迟扩展?

    参考C++的“静态变量”概念,c++编译的时候,会对静态变量进行值的替换,但这个替换是基于静态的前提下,那么进行变量扩展时,也是这样,但如果出现动态的情况会怎样?在cmd执行中,发生动态的一种情况是在for语句中进行变量赋值,在延迟变量扩展中,要使用!来引用变量,即使用一对!!号代替%%来取变量的值

  3. for /f [“options”] %%i in (file) do command : 循环命令,
    /f 会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行;

    options 为可选参数,包括delims和tokens;

    • delims 用来告诉for 每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键

    • tokens 的作用就是当你通过delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几

      file 代表一个或多个文件

      %%i 替代集合中的每一个元素(item)

  4. dir /a /b : dir显示当前目录下除系统文件和隐藏文件外的文件,默认显示修改时间,文件类型,大小及文件名

    /a 参数显示所有文件,包括隐藏文件和系统文件

    /b 则只显示文件名

  5. set : 定义变量并给变量赋值,set wind=%%1意思为将%%1赋值给变量wind

  6. ren “%%1” “!wind:副本=!” : 重命名命令,

    ren 为rename的缩写

    %%1 为要文件夹下要修改的某一文件名

  7. !wind:副本=! 在设置变量延迟扩展setlocal enabledelayedexpansion后用一对!!号代替%%来取变量的值

  8. wind:副本= : wind为变量名,变量名后带 : 号表示对变量进行替换操作, 变量名后带 :~start,length 表示对变量进行截取操作.此处该命令表示的是将wind变量的值中包含的 “副本” 字符串替换为 “” 空字符串

linux 篇

建设中….

作者

BE

发布于

2020-10-21

更新于

2021-08-15

许可协议