如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?
发布网友
发布时间:2022-03-05 01:08
我来回答
共3个回答
热心网友
时间:2022-03-05 02:37
不清楚你的实际文件/情况,仅以问题中的样例/说明为据
复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行<# :
cls
@echo off
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]::Default))) -Args '%~dp0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$path=$args[0].trimend('\');
$dic=New-Object 'System.Collections.Generic.Dictionary[string,Object]';
$files=@(dir -liter $path -recurse|?{('.bat' -ne $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
if(-not $files[$i].Directory.Name.Contains(':')){
if(-not $dic.ContainsKey($files[$i].Directory.FullName)){
[System.Collections.ArrayList]$arr=@();
$dic.add($files[$i].Directory.FullName, $arr);
};
[void]$dic[$files[$i].Directory.FullName].add($files[$i]);
mv -liter $files[$i].FullName ($files[$i].Directory.FullName+'\#'+$files[$i].Name);
};
};
foreach($k in $dic.keys){
$foldername=$k.split('\')[-1];
for($i=0;$i -lt $dic[$k].count;$i++){
$newname=$foldername+'-'+($i+1).toString().PadLeft(2, '0')+$dic[$k][$i].Extension;
write-host ($dic[$k][$i].FullName+' --> '+$newname);
mv -liter ($dic[$k][$i].Directory.FullName+'\#'+$dic[$k][$i].Name) ($dic[$k][$i].Directory.FullName+'\'+$newname);
};
}
热心网友
时间:2022-03-05 03:55
将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增
热心网友
时间:2022-03-05 05:30
您指的上一级文件夹,是指被重命名的文件所在的文件夹上面那个文件夹吗?还是文件所在的那个文件夹
比如路径为“ X:\A\B\C文件 ”中C文件重命名成A那个目录名,还是B那个目录名?来自:求助得到的回答