bat批处理修改多层⽂件夹名称
最近朋友⼀直抱怨说有⼀堆的⽂件夹需要重新修改名称,⼀个⼀个处理⾮常浪费时间,问有没有什么简洁的⽅法进⾏处理。在明⽩了朋友的需求后,想到可以写个bat批处理⽂件进⾏处理。
⾸先分析下朋友的需求:
原⽂件夹名称及结构:D:\
----test01
----test02_XXXX_XXXX
----test03_XXXX_XXXX
需要将test01⽂件夹下的test02下划线后的内容去掉,并将⽂件夹test02下的test03⽂件夹下划线后⾯的内容去掉。
修改为:
----test01
----test02
----test03
明⽩需求后,发现可以通过获取⽂件夹的名称,并通过下划线区切⽂件夹名,并利⽤bat批处理命令的“ren”进⾏改名。处理代码如下:
@echo off&setlocal enabledelayedexpansion
::获取当前路径的⽂件夹名
for /f %%p in ('dir /ad/b') do (
  set p1=
  set p2=--
批处理文件怎么做  ::输出当前⽂件夹名称
  echo %%p
  cd %%p
  ::获取当前⽂件夹下的⼦⽂件夹名
  for /f %%a in ('dir /ad/b') do (
    set pathname=%%a
    ::通过"_"区切出当前⽂件夹名的第⼀个名称
    for /f "tokens=1 delims=_" %%b in ("!pathname!") do (
      set new_pathname=%%b
    )
    ::更改⽂件夹名
    ren !pathname! !new_pathname!
    ::输出当前⽂件夹下的⼦⽂件夹名
    echo !p1!!p2!!pathname!
    ::定位到当前⽂件夹下的⼦⽂件夹名
    cd .\!new_pathname!
    ::获取当前⽂件夹下的⼦⽂件夹名
    for /f %%c in ('dir /ad/b') do (
      set pathname2=%%c
      ::输出当前⽂件夹下的⼦⽂件夹名
      echo !p1!!p1!!p1!!p2!!pathname2!
      ::通过"_"区切出当前⽂件夹名的第⼀个名称
      for /f "tokens=1 delims=_" %%d in ("!pathname2!") do (        set new_pathname2=%%d
      )
      ::更改⽂件夹名
      ren !pathname2! !new_pathname2!
      )
    cd ..
  )
cd ..
)
pause
处理后的结果:
初步实现了⽂件夹的名称修改。发给朋友后,朋友在需要修改的路径下进⾏了测试,发现有部分⽂件夹名⽆法修改,原因是⽂件夹名中有空格,⽤上述的代码⽆法处理,见下图:
原因批处理命令遇到“space”后便把space前后的命令当成两个命令,导致⼀个⽂件夹名变成两个,因此提⽰系统不到指定⽂件。
对上述代码进⾏修改,加⼊"tokens=* delims="参数,即将bat默认的以space区分修改为不以space区分,修改后的代码如下:
@echo off&setlocal enabledelayedexpansion
::获取当前路径的⽂件夹名
for /f %%p in ('dir /ad/b') do (
  set p1=
  set p2=--
  ::输出当前⽂件夹名称
  echo %%p
  cd %%p
  ::获取当前⽂件夹下的⼦⽂件夹名
  for /f "tokens=* delims=" %%a in ('dir /ad/b') do (
    set pathname=%%a
    ::通过"_"区切出当前⽂件夹名的第⼀个名称
    for /f "tokens=1 delims=_" %%b in ("!pathname!") do (
      set new_pathname=%%b
    )
    ::更改⽂件夹名
    ren "!pathname!" !new_pathname!
    ::输出当前⽂件夹下的⼦⽂件夹名
    echo !p1!!p2!!pathname!
    ::定位到当前⽂件夹下的⼦⽂件夹名
    cd .\!new_pathname!
    ::获取当前⽂件夹下的⼦⽂件夹名
    for /f "tokens=* delims=" %%c in ('dir /ad/b') do (
      set pathname2=%%c
      ::输出当前⽂件夹下的⼦⽂件夹名
      echo !p1!!p1!!p1!!p2!!pathname2!
      ::通过"_"区切出当前⽂件夹名的第⼀个名称
      for /f "tokens=1 delims=_" %%d in ("!pathname2!") do (
        set new_pathname2=%%d
      )
      ::更改⽂件夹名
      ren "!pathname2!" !new_pathname2!
      )
    cd ..
  )
cd ..
)
pause
执⾏上述代码,结果如下:
注意上述代码中“ren”命令中的第⼀个参数要⽤“”引起来,否则命令不起作⽤。

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