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

文件夹AAA下有很多子文件夹,文件夹名称格式:
A2001630 苹果 70-30-50 2300
B2002390 西红柿 103-80-5 335
H2003180 牛奶加面包 90-65-6 15000
A2003010 面包 90-65-5 1300
。。。。。。

提取编号:A2001、B2002、H2003、A2003、、、、、
提取价格:2300、335、15000、1300、、、、
提取产品:苹果、西红柿、牛奶加面包、面包、、、、
提取尺寸:70-30-50、103-80-5、90-65-6、90-65-5、、、、
提取路径:A2001630 苹果 70-30-50 2300文件夹下第一张jpg图片的路径
B2002390 西红柿 103-80-5 335文件夹下第一张jpg图片的路径
、、、、、、
输出文件1.txt,格式:
参数 价格 照片
A2001 苹果 70-30-50 2300 A2001630 苹果 70-30-50 2300文件夹下第一张jpg图片的路径
B2002 西红柿 103-80-5 335 B2002390 西红柿 103-80-5 335文件夹下第一张jpg图片的路径
、、、、、、、

输出文件2.txt,格式:
产品 尺寸 照片
苹果 70-30-50 A2001630 苹果 70-30-50 2300文件夹下第一张jpg图片的路径
西红柿 103-80-5 B2002390 西红柿 103-80-5 335文件夹下第一张jpg图片的路径
、、、、、、、

怎么做?求高手

@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);
}


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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-19
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本回答被网友采纳
相似回答