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

2024-11-05 01:50:46
推荐回答(4个)
回答1:

@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            var len = arr[i][j].replace(reg, '..').length;
            if(!max[j] || len > max[j]) max[j] = len;
        }
        i++;
    }
}
 
for(var i=0; i    var s = '';
    for(var j=0; j        var len = max[j] - arr[i][j].replace(reg, '..').length;
        var space = ' ';
        for (var k=0; k        s += arr[i][j] + space;
    }
    WScript.Echo(s);
}


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

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

回答2:

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

回答3:

@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中执行

回答4:

我也贡献一个:
@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的脚本的基础上改的。