BAT重命名所有目录下所有子文件夹内的文件

目录AAA下有很多子目录:A01、A02、A03...这些子目录下都有许多jpg的图片文件,我现在想把这些图片文件命名成:目录的文件名_序号比如A01下的图片命名成A01... 目录AAA下有很多子目录:
A01、A02、A03...
这些子目录下都有许多jpg的图片文件,我现在想把这些图片文件命名成:目录的文件名_序号
比如A01下的图片命名成 A01_01.JPG,A01_02.JPG...
A02下的图片命名成 A02_01.JPG,A02_02.JPG...
怎么做?求高手
展开
 我来答
依梦琴瑶
高粉答主

2017-10-19 · 说的都是干货,快来关注
知道顶级答主
回答量:6.9万
采纳率:82%
帮助的人:1.7亿
展开全部
@echo off & title 根据文件夹名生成相关文本 By 依梦琴瑶
cd /d %~dp0 & color 0a
setlocal enabledelayedexpansion

::设置要处理的目录路径,如果直接处理当前目录,请留空
set DirPath=AAA

::设置文件一的输出路径
set File_A=%cd%\1.txt

::设置文件二的输出路径
set File_B=%cd%\2.txt


:::::主代码执行区:::::
if defined DirPath (
    if not exist "%DirPath%" (
        echo 您预设的路径不存在,请按任意键退出后重新设置。
        goto End
    )
    cd /d "%DirPath%"
)

(echo 参数^|^|^|^|价格^|^|^|^|照片)>File_A_TMP
(echo 产品^|^|^|^|尺寸^|^|^|^|照片)>File_B_TMP

for /d %%a in (*) do (
    set "Str=%%~nxa"
    for /f "tokens=1-4" %%b in ("%%~nxa") do (
        set "Number=%%~b"
        set "Goods=%%~c"
        set "Size=%%~d"
        set "Price=%%~e"
    )
    call :GetJpgPath "%%~fa" JpgPath
    if not defined JpgPath set JpgPath=没有图片文件
    >>File_A_TMP echo !Number:~,5! !Goods! !Size!^|^|^|^|!Price!^|^|^|^|!JpgPath!
    >>File_B_TMP echo !Goods!^|^|^|^|!Size!^|^|^|^|!JpgPath!
)

for /f "skip=1 tokens=1 delims=[]" %%a in ('find /n "::SortingListVBS::" "%~0"') do set Line=%%~a
more +%Line% "%~0">Sorting.VBS
(cscript //nologo //e:jscript "Sorting.VBS" < File_A_TMP)>"%File_A%"
(cscript //nologo //e:jscript "Sorting.VBS" < File_B_TMP)>"%File_B%"
del /f/q File_?_TMP Sorting.VBS
cls & echo 已生成文本,请按任意键退出

:End
pause>nul & exit

:GetJpgPath
set "%~2="
for /f "delims=" %%i in ('dir /a-d/s/b/on "%~1\*.jp*g" 2^>nul') do (
    set "%~2=%%~i"
    goto :eof
)
goto :eof

::SortingListVBS::
var i = 0, arr = [], max = [];
var reg = /[^\x00-\xff]/g;
 
while(!WSH.StdIn.AtEndOfStream){
    var strLine = WSH.StdIn.ReadLine();
    if(!/^\s*$/.test(strLine)) {
        arr[i] = strLine.split('||');
        for(var j=0; j<arr[i].length; j++) {
            var len = arr[i][j].replace(reg, '..').length;
            if(!max[j] || len > max[j]) max[j] = len;
        }
        i++;
    }
}
 
for(var i=0; i<arr.length; i++) {
    var s = '';
    for(var j=0; j<arr[i].length; j++) {
        var len = max[j] - arr[i][j].replace(reg, '..').length;
        var space = ' ';
        for (var k=0; k<len; k++) space += ' ';
        s += arr[i][j] + space;
    }
    WScript.Echo(s);
}


希望这个代码符合您的要求。

以下为生成后的文本效果:

糖糖寳寳
推荐于2016-02-08 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:3954万
展开全部
1、bat重命名文件
ren 111.txt 222.doc
解释:将111.txt 命名为222.doc
2、循环重命名一个文件夹下的所有结尾为xls的文件,前加上A
for /f %%i in ('dir /b *.txt') do (ren %%i A%%i)
比如有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……
要求在所有文件名前加上A_
@echo off
rem 启用"延缓环境变量扩充"
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有图片的文件名,支持带空格的名称
for /f "delims=" %%i in ('dir /b *.jpg') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
echo 批量重命名完成!
pause
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
司马刀剑
高粉答主

2017-10-19 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7503万
展开全部
1、bat重命名文件
ren 111.txt 222.doc
解释:将111.txt 命名为222.doc
2、循环重命名一个文件夹下的所有结尾为xls的文件,前加上A
for /f %%i in ('dir /b *.txt') do (ren %%i A%%i)
比如有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……
要求在所有文件名前加上A_
@echo off
rem 启用"延缓环境变量扩充"
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有图片的文件名,支持带空格的名称
for /f "delims=" %%i in ('dir /b *.jpg') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
echo 批量重命名完成!
pause
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
albumin
推荐于2018-02-27 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2385万
展开全部
@echo off&setlocal enabledelayedexpansion
for  /f "delims=" %%a in ('dir /ad /b') do (
set n=1000
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.jpg" 2>nul') do (
set /a n+=1
set m=!n:~1!
ren "%%a\%%b" "%%a_!m!%%~xb"
)
)

保存为BAT放在目录AAA中执行

追问
不行啊,闪一下就没了,提示此时不应有2>nul
追答
@echo off&setlocal enabledelayedexpansion
for  /f "delims=" %%a in ('dir /ad /b') do (
set n=1000
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.jpg" 2^>nul') do (
set /a n+=1
set m=!n:~1!
ren "%%a\%%b" "%%a_!m!%%~xb"
)
)
pause

原来重定向在for读取的命令中要用^转义,已经修改了,应该可以了

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
硅谷少年
2020-05-06 · TA获得超过7556个赞
知道大有可为答主
回答量:7116
采纳率:82%
帮助的人:1428万
展开全部
我也贡献一个:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b') do (
for /f "delims=" %%b in ('dir /a-d /on /b "%%a\*.pdf" 2^>nul') do (
set "n=%%b"
ren "%%a\%%b" "!n:~0,8!%%~xb"
)
)
pause
目录AAA下有很多文件夹,每个子文件夹里很多pdf文件,批量把每个pdf文件重命名,取原文件名前8个字符作为新文件名,上面代码亲测可用,是我工作中用到的。
非常感谢albumin,我是在ta的脚本的基础上改的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式