Board logo

标题: [文件操作] [已解决]批处理如何批量修改文件夹名称 [打印本页]

作者: liaoguinan    时间: 前天 08:31     标题: [已解决]批处理如何批量修改文件夹名称


如何遍历批量修改子文件夹下的文件夹名称?
修改后面的序号,从1开始排
有数字或者字母这些的会有空格隔开
作者: qixiaobin0715    时间: 前天 09:55

本帖最后由 qixiaobin0715 于 2024-12-26 12:50 编辑

代码未经测试,写的比较匆忙,未仔细检查,你先试试或者把文件传上来测试一下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     pushd "%%i"
  5.     set n=1000000
  6.     setlocal enabledelayedexpansion
  7.     for /f "delims=" %%j in ('dir /b /ad') do (
  8.         set "FN=%%j"
  9.         set "FN=!FN:*%%i-=!"
  10.         set /a m=FN
  11.         set /a m=m+n
  12.         for /f "tokens=* delims=0123456789" %%k in ("!FN!") do set "_!m!:%%j=%%k"
  13.     )
  14.     set x=0
  15.     for /f "tokens=2* delims=:=" %%a in ('set _') do (
  16.         set /a x+=1
  17.         ren "%%a" "%%i-!x!%%b"
  18.     )
  19.     endlocal
  20.     popd
  21. )
  22. pause
复制代码

作者: aloha20200628    时间: 前天 16:47

本帖最后由 aloha20200628 于 2024-12-26 16:48 编辑

回复 1# liaoguinan

仅用0-9数字分割目录名会把其后目录名中的数字一同删除,后还须改用 call :cutHd ...
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "delims=" %%D in ('dir /b/ad') do set "n=" &for /f "delims=" %%d in ('dir /b/ad "%%D"') do (
  3.    set "d=%%d" &set "_d=!d:*%%D-=!" &set/a "n+=1" &(call :cutHd)
  4.    ren "%cd%\%%D\%%d" "%%~nxD-!n!!_d!")
  5. pause&exit/b
  6. :cutHd
  7.    if "!_d:~,1!" geq "0" if "!_d:~,1!" leq "9" (set "_d=!_d:~1!" &goto :cutHd)
  8.    exit/b
复制代码

作者: liaoguinan    时间: 前天 21:05

回复 2# qixiaobin0715


    代码有用
作者: qixiaobin0715    时间: 昨天 09:09

本帖最后由 qixiaobin0715 于 2024-12-27 09:35 编辑

回复 3# aloha20200628
大佬可能没明白2楼代码表达的意义,你说的问题应当不存在,实际上反而有较大的另外一个可能的bug,那就是原有序号不能是类似0123(0开头)这样的情况出现,否则可能会对重新编号的顺序有影响。
写代码时已知悉这个bug,只不过对于楼主提供的文件格式(非0开头)不会有影响。不要芝麻未得到,西瓜也丢了额。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2