[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何批量修改文件夹名称


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

本帖最后由 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
复制代码
1

评分人数

TOP

本帖最后由 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
复制代码

TOP

回复 2# qixiaobin0715


    代码有用

TOP

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

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

TOP

返回列表