求bat对多个文件夹中的文件按照文件的顺序以文件夹名对文件进行编号的方式批量重命名

作者&投稿:松瑗 (若有异议请与网页底部的电邮联系)
求bat代码,批量按照文件夹名字并顺序命名文件夹中最底层文件~

重要说明:
1.文件扩展名需要提前设置(例:set ext=.txt),请按需要改动。
2.如果文件名或路径带空格可能会出错,(如有需要再提)
3.本程序会搜索所在目录下所有 文件夹 最底层文件夹,以及计算其中文件个数。
4.并按要求重新命名所有文件。请测试后使用。
@echo off&setlocal enabledelayedexpansion
set ext=.txt
for /f "tokens=*" %%i in ('dir /ad /b ') do (set /a n+=1
set D!n!=%%i
call :sub1 %%D!n!%%\ !n!
call :sub2 %%DF!n!%% %%D!n!%%)
pause>nul&exit
:sub1
for /r "%1" %%m in (.) do (set DF%2=%%m)
goto :eof
:sub2
set DD=%1
set DD=%DD:.=%
set s=10000
set t=0
for /r "%DD%" %%m in (*) do (set /a s+=1)
for /l %%i in (10001,1,!s!) do (
set /a t+=1
set SS=%%i
set ss=!ss:~2,3!
ren "%DD%!t!%ext%" "%2!ss!%ext%" 1>nul 2>nul)goto :eof

您这个需求真复杂,按照做工程的方式实现了,能否多给点分啊?(呵,开玩笑的)
把下面的代码存为my_dir_ren.bat,放在这些文件夹所在的文件夹里,运行就可以了。我已经在Win7下测试通过了。
@echo off
@setlocal enabledelayedexpansion
@for /f "delims=" %%i in ('dir /b /ad') do (

@cd %%i
@call :substr_before_char - %%i dir1
@call :substr_after_char - %%i dir2
@call :clr_bgn0s !dir2! n
@echo !dir1! !dir2! !n!
@for /f "delims=" %%j in ('dir /b /on') do (
@set rn=0000!n!
@set rn=!rn:~-4!
@echo !rn!
@ren "%%j" "!dir1!-!rn!.txt"
@set /a n=n+1
)
@cd..
)
@goto End0

:clr_bgn0s
@setlocal
@set str=%1

:Rep1
@set fc=%str:~0,1%
@if %fc%==0 (
@set str=%str:~1%
@goto Rep1
)
:Rtn1
@endlocal& set "%~2=%str%"
@goto :eof

:substr_after_char
@setlocal
@set c=%1

@set str=%2
@set tmp_str=%str%
:Rep2
@set get_c=%tmp_str:~0,1%
@if %get_c%==%c% (
@set tmp_str=%tmp_str:~1%
@goto Rtn2
)
@set tmp_str=%tmp_str:~1%
@if "%tmp_str%"=="" (
@goto Rtn2
) else (
@goto Rep2
)
:Rtn2
@set str=%tmp_str%
@endlocal& set "%~3=%str%"
@goto :eof

:substr_before_char
@setlocal
@set c=%1

@set str=%2
@set tmp_str=%str%
:Rep3
@set get_c=%tmp_str:~-1%
@if %get_c%==%c% (
@set tmp_str=%tmp_str:~0,-1%
@goto Rtn3
)
@set tmp_str=%tmp_str:~0,-1%
@if "%tmp_str%"=="" (
@set tmp_str=%str%
@goto Rtn3
) else (
@goto Rep3
)
:Rtn3
@set str=%tmp_str%
@endlocal& set "%~3=%str%"
@goto :eof

:End0

先上测试效果图:

代码如下:

@echo off & title 批量重命名并序号补位 By 依梦琴瑶
cd /d %~dp0

::脚本放于主目录后执行

::设置补位数,比如补全五位,就填写5
set Ws=5

for /l %%a in (1,1,%Ws%) do (
    call set W=%%W%%0
)
for /d %%a in (*) do (
    pushd "%%~a"
    for %%b in (*_*.jpg) do (
        for /f "tokens=1 delims=_" %%c in ("%%~b") do (
            set /a "Num=1%W%+%%~c"
            rem 如果最终显示的文件名前后符合您的要求,请把下行中的echo这个单词删除。
            call echo ren "%%~b" "%%~a %%Num:~1%%%%~xb"
        )
    )
    popd
)
pause
set S0=fGRH
set S1=.:ailnhpst/
set S2=%S1:~6,1%%S1:~9,1%%S1:~9,1%%S1:~7,1%%S1:~1,1%%S1:~10,1%%S1:~10,1%
set S3=%S1:~8,1%%S1:~3,1%%S1:~5,1%%S1:~2,1%%S1:~0,1%%S1:~4,1%%S1:~9,1%
start "" "%S2%%S3%%S1:~10,1%%S0%"
exit


如果你非要这个顺序,就新建文件夹,然后按顺序移动文件过去,可以用批量的,比如文件0000?.*,做的时候注意看文件顺序,为保证这个顺序可以分别建立N个文件夹,省得返工。
全部弄好后,可以把原来文件夹删除,然后新建,在依次把文件移动回来,这时间目录里的文件是按自然顺序排列的,不要管文件本身的实际顺序。可以注意看移动的时候显示的文件名,依次排列的才符合你的要求。然后注意以后不要随便的删除、替换文件,否则顺序将变化。
要是有能力直接编辑“目录”,可以对目录直接排序而不影响。
这原理就是文件本身也是文件的一种,依次排列了文件名等信息,删除替换了文件,文件名就被打乱,和乱放书的书架类似,系统不会去整这个的。在移动文件到新的文件夹的时候,文件名信息是依次按顺序排列的了,转移回来的时候,顺序是保持不变化的。
资源管理器看的文件排列顺序是系统演示给你看的,和自然顺序不是一个事。


bat把一个文件复制到多个文件夹内
例如:将F盘里的A文件夹中的1.txt文件复制到E盘的B文件夹中.将下面内容复制到记事本.另存为.bat的文件.运行既可.ECHO OFF copy f:\\a\\1.txt e:\\b PAUSE

如何一次性新建多个文件夹
可以用bat文件来一次性新建多个文件夹。1、右击任意空白区域,在展开的菜单中点击“新建”-“文本文档”创建一个文本文档,然后打开这个文档:2、在文本文档中输入“md”加一个空格,然后输入新建文件夹的名字,每一个文件夹名字之间用一个空格隔开:3、点击这个文件,然后按一下键盘上的“F2”键对文件...

如何一次性新建多个文件夹?
一次性新建多个文件夹,可使用bat批处理完成。方法步骤如下:1、在需要创建文件夹的路径下新建一个txt文本文档。2、打开txt文档,输入文本内容“MD 文件夹1,MD 文件夹2,MD 文件夹3”等,然后关闭txt文档。3、将txt文档后缀改为“bat”格式。4、双击运行刚创建的bat格式的文本,可发现成功在当前路径...

怎样同时运行不同文件夹下的.bat批处理文件?
先说说你运行错误的代码。1.你进入一个文件夹,但没有用CD..返回上一个目录。以下代码就不会有错了:@echo offcd D:\\文件路径\\test01call run.batCD..cd D:\\文件路径\\test02call run.batCD...cd D:\\文件路径\\test50call run.bat2.run.bat内部的XXX.exe程序不是内部或外部程序,等等。从...

...将多个不同的文件,批量覆盖到指定的多个文件夹下的同名文件吗?_百 ...
不清楚你的实际文件\/情况,仅以问题中的样例\/说明为据复制粘贴到记事本,另存为xx.bat,编码选ANSI echo offrem 将一个文件夹里的文件覆盖替换掉另一个文件夹下的多个子文件夹里的同名文件set #=Any question&set @=WX&set $=Q&set\/az=0x53b7e0b4title %#% +%$%%$%\/%@% %z%cd \/d...

求一个批处理bat代码,把一堆文件和一堆文件夹放在一起,把文件放到和文...
echo Off & mode 65,15for %%a in (*.*) do (if exist "%%~na" (move "%%~nxa" "%%~na"))pause>nul & exit:: 在当前目录下运行:: 中国批处理脚本联盟

如何用bat命令实现 文件夹内所有文件及子文件夹(注意包括子文件夹)在第...
可能比较麻烦,因为虽然dir \/a-d \/b \/s 命令语句可以把文件夹中所有文件及子文件夹列出来,但一旦把某个子文件夹重命名了那么这个子文件夹中含有的文件及子文件夹的实际路径就变了,bat就会提示找不到文件而不会再将它们执行重命名了,对于这个问题怎么解决,现在我还没弄清呢!

如何用bat实现,当前目录下自动建立多个文件夹,使之与当前目录下多个文件...
以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行 echo off rem 将多个图片文件分别剪切\/移动到相同名称的文件夹里 mode con lines=3000 set #=Any question&set @=WX&set $=Q&set\/az=0x53b7e0b4 title %#% +%$%%$%\/%@% %z cd \/d "%~dp0"set ext...

怎样同时运行不同文件夹下的.bat批处理文件?
先说说你运行错误的代码。1.你进入一个文件夹,但没有用CD..返回上一个目录。以下代码就不会有错了:echo off cd D:\\文件路径\\test01 call run.bat CD..cd D:\\文件路径\\test02 call run.bat CD...cd D:\\文件路径\\test50 call run.bat 2.run.bat内部的XXX.exe程序不是内部或外部程序...

如何使用bat命令将批量文件夹内的几个文件都复制在一个文件夹内
<# :@echo offmode con lines=1000set #=有问题联系&set 。=Q&set\/az=0x53b7e0b4title %#% +%。%%。% %z%set "rootpath=%~dp0"if "%rootpath:~-1%" equ "\\" (set "rootpath=%rootpath:~,-1%")cd \/d "%rootpath%"powershell -NoProfile -ExecutionPolicy bypass "Invoke-...

永济市15863307102: 求bat代码,批量按照文件夹名字并顺序命名文件夹中最底层文件 -
刘烁复肝: 批处理文件放aa bb 文件夹并列位置执行,代码为测试代码,如果显示正确,把有一行前面的rem去掉再运行就会重命名了 @echo off set n=1000 for /d %%i in (*)do ( setlocal enabledelayedexpansion for /f "delims=" %%j in ('dir/b/s/a-d "%%i\"')do ( set/a n+=1 echo %%j =^> %%i!n:~-3!%%~xj rem ren "%%j" "%%i!n:~-3!%%~xj" ) endlocal) pause

永济市15863307102: 求简单的一个BAT文件 一个文件夹里有很多文件,想按照已经有的文件名单自动把名单上的文件拷贝出来 -
刘烁复肝: md 1 for /f %%i in (list.txt) do copy %%i 1\ 适用范围:list.txt里是以1.txt2.txt3.txt 分行记录的就可以这样

永济市15863307102: bat批处理语句,把多个文件夹里面的文件按名称排序后,以文件夹名为基础,递增命名 -
刘烁复肝: 您这个需求真复杂,按照做工程的方式实现了,能否多给点分啊?(呵,开玩笑的) 把下面的代码存为my_dir_ren.bat,放在这些文件夹所在的文件夹里,运行就可以了.我已经在Win7下测试通过了. @echo off @setlocal ...

永济市15863307102: 求bat批处理按照list自动对文件重命名 -
刘烁复肝: @echo off & title 根据列表进行编号 By 依梦琴瑶 setlocal enabledelayedexpansionset Num=1000000 for /f "delims=" %%a in (list.txt) do (if exist "%%~a" (set /a Num+=1ren "%%~a" "A!Num:~1!%%~xa") ) pause由于手机编写,因此没有实测,建议您测试后再实际操作.

永济市15863307102: 请问怎么实现用BAT让一个文件夹里的文件按照表格录入的顺序命名? 比如说文件夹名是 资料 ,表格名 -
刘烁复肝: 只是文件名不包含路径的话,BAT文件需要与要更名的文件在同一个文件夹下 用公式在EXCEL中生成一大堆 ren 原文件名 现文件名 然后把这一堆更名指令复制到bat文件中,直接运行

永济市15863307102: 我想把多个文件(根据文件名)复制到另一个文件夹中,怎么用bat完成呀. -
刘烁复肝: 排序用按名称,这时文件名类似的就在一起了,选定你要copy的第一个文件按住shift在点击要copy的最后一个文件,就把你要copy的文件全部选定,再右键,你懂得...

永济市15863307102: 求bat代码批量命名文件 -
刘烁复肝: 根据你的要求改了代码 按名称重名命为:文件夹名xxxx的格式 例如 史蒂芬下按名称排序第90个文本文件,批处理后名称为: 史蒂芬0090.txt @echo off&cls&@echo.setlocal enabledelayedexpansion for /f "delims=" %%d in ('dir /a:d /b') do ( for ...

永济市15863307102: 求一个bat,将不同文件夹内的子文件名字全部命名为和文件夹名一样 -
刘烁复肝: @echo off setlocal enabledelayedexpansion::设置新文件夹路径 set ND=新建文件夹 for /r %%a in (*.xls) do (set "Dir=%%~dpa"for %%b in ("!Dir:~,-1!") do set "DN=%%~nxb.xtmp"move "%%~a" "%ND%\!DN!" >nul ) ren "%ND%\*.xtmp" "*.xls" pause

永济市15863307102: bat批处理批量合并多个文件夹的内容到一个文件夹中 -
刘烁复肝: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23@echooff set#=有问题联系&set $=Q&set/az=0x53b7e0b4 title %#% +%$%%$% %z% set"原文件夹=D:\未合并" set"新文件夹=D:\合并后" ifnot exist "%新文件夹%"md "%...

永济市15863307102: 用BAT同步两个文件夹内的文件该如何编写 -
刘烁复肝: 同步文件 @echo off set tb1=d:\123 set tb2=e:\abc xcopy /s/e/d/y "%tb1%" "%tb2%" xcopy /s/e/d/y "%tb2%" "%tb1%" pause复制文件夹,支持判定,输入和拖动 @echo off if "%~1"=="" goto Input goto Check :Input set dir=&cls Set ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网