怎么样用bat批处理给多级文件夹下的文件名加指定前缀?
2个回答
展开全部
@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
展开全部
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为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;
}
}
<# :
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询