如何通过删除文件名中最后一次出现 "by" 和之后的所有内容来重命名几千个文件
How to rename a few thousand files by removing everything including and after the last occurance of "by" in the filename
我有几千个文件,文件的文件名中包含作者姓名。这造成的主要问题是文件名变得太长,因为所有作者都被提及并且由于 windows 文件名长度限制而无法将它们移动到不同的文件夹。我需要通过删除 "by " 最后一次出现后的所有内容来重命名文件,包括 "by " 本身。
重命名这么多文件的唯一方法是编写某种程序。最快的方法是什么?
您可以使用 PowerShell 脚本重命名多个文件。
试一试:
$cur_dir = pwd
$files = Get-ChildItem $cur_dir
foreach($file in $files){
$rev_name = $file.name
$rev_name = $rev_name.ToCharArray()
[Array]::Reverse($rev_name)
$rev_name = -join $rev_name
$indi = $rev_name.IndexOf("yb")
if($indi -ge 0){
$start_ind = $rev_name.length - $indi-2
$final_name = $file.name.substring(0,$start_ind)
Rename-Item -Path $file.name -NewName $final_name
}
}
希望对您有所帮助。
我有几千个文件,文件的文件名中包含作者姓名。这造成的主要问题是文件名变得太长,因为所有作者都被提及并且由于 windows 文件名长度限制而无法将它们移动到不同的文件夹。我需要通过删除 "by " 最后一次出现后的所有内容来重命名文件,包括 "by " 本身。
重命名这么多文件的唯一方法是编写某种程序。最快的方法是什么?
您可以使用 PowerShell 脚本重命名多个文件。 试一试:
$cur_dir = pwd
$files = Get-ChildItem $cur_dir
foreach($file in $files){
$rev_name = $file.name
$rev_name = $rev_name.ToCharArray()
[Array]::Reverse($rev_name)
$rev_name = -join $rev_name
$indi = $rev_name.IndexOf("yb")
if($indi -ge 0){
$start_ind = $rev_name.length - $indi-2
$final_name = $file.name.substring(0,$start_ind)
Rename-Item -Path $file.name -NewName $final_name
}
}
希望对您有所帮助。