标题: [文件操作] 批量修改多个文件夹下所有文件的名称 [打印本页]
作者: forever1314 时间: 2022-3-12 13:23 标题: 批量修改多个文件夹下所有文件的名称
一键修改多个文件夹中的文件名与文件夹名一致,如文件夹内有多个文件,则在名称后按数字排序
作者: 求知路漫漫 时间: 2022-3-12 15:35
- @echo off
- set /a num=1
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /s /b "%~1\"') do ren "%%~i" "%~n1!num!%%~xi" & set /a num+=1
- pause
- pause
复制代码
在没有嵌套文件夹时可用,直接把文件夹拖到bat上即可
作者: forever1314 时间: 2022-3-12 15:57
这个只能一个一个拖么,有没有更方便一点的呢,谢谢
作者: 求知路漫漫 时间: 2022-3-13 01:44
本帖最后由 求知路漫漫 于 2022-3-13 02:06 编辑
- @echo on
- set oldname=?
- set newname=?
- set num=0
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /s /b "%~1"') do (
- set f=%%~a
- set h=%%~xa
- set d=%%~dpa
- set s=%%~pa
- set s=!s:~0,-1!
- call :t "!s!"
- :here
- echo.
- (if "!newname!" equ "!oldnanme!" (
- :rename1
- set /a num+=1
- if exist "!d!!newname!!num!!h!" (call :rename1) else (
- ren "!f!" "!newname!!num!!h!"
- )
- ) else (
- set /a num=0
- :rename2
- set /a num+=1
- if exist "!d!!newname!!num!!h!" (call :rename2 ) else (
- ren "!f!" "!newname!!num!!h!"
- set "oldname=!newname!"
- )
- )
- )
- )
- goto :eof
-
- :t
- set "newname=%~n1"
- goto :eof
复制代码
作者: 求知路漫漫 时间: 2022-3-13 01:56
本帖最后由 求知路漫漫 于 2022-3-13 02:02 编辑
上一楼的代码可以支持嵌套多层文件夹,只需要把最外层文件夹拖到bat上即可。有一个bug暂时无法处理,希望有高手可以指点。举例:如果其中某个文件夹为cc,里面有个文件名称又恰好是cc1,大概率会导致此文件夹内的文件名称序号不是从1开始。
同时还有疑问,虽然不影响程序功能,但是实在不甘心,望大佬解惑。
一、14行的空行不能删除,删除会报语法错误,程序闪退,但是,可以换成任意回显,实在不可理解。
二、32行必须存在,神奇的地方
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |