我在具有这种命名约定的目录中有大量文件:“1050_14447_Letter Extension.pdf”等。我需要删除第二个下划线(包括第二个下划线)之前的所有字符。所以新的文件名是“Letter Extension.pdf”。如何相应地迭代单个目录重命名?
5 回答
这是一个重命名当前目录中所有 pdf 文件的示例,从文件名中删除所有前导数字或下划线:
Get-ChildItem -Filter *.pdf | Rename-Item -NewName {$_.Name -replace '^[0-9_]+'}
这是另一种不依赖正则表达式但假定文件路径中没有下划线的方法:
Get-ChildItem 'C:\path2files' | %{
Rename-Item $_.fullname $_.Name.Split("_")[2]
}
给定一个像“1050_14447_Letter Extension.pdf”这样的字符串,这是一种方法:
$foo = "1050_14447_Letter Extension.pdf"
$foo -replace '^.*_.*_(.*)$', '$1'
这将处理文件名中任意数量的下划线(忽略路径)并在生成新名称时跳过所有内容,包括最后一个下划线:-
Get-ChildItem 'C:\somedir' -Filter *.pdf |`
%{Rename-Item $_.Fullname ($_.Name.Split("_")|`
select -last 1)}
您可以使用 rename-item 命令上的 -whatif 开关进行测试,例如
gci 'R:\TECH' -Filter *.pdf|`
%{rename-item -whatif $_.Fullname ($_.Name.Split("_")|`
select -last 1)}
回报:
如果:对目标“项目:R:\TECH\38415_JOBS121121155535240.pdf 目标:R:\TECH\JOBS121121155535240.pdf”执行“重命名文件”操作。如果:对目标“项目:R:\TECH\CHG38415_JOB_121112153717550.pdf 目标:R:\TECH\121112153717550.pdf”执行“重命名文件”操作。如果:对目标“项目:R:\TECH\CHG38415_PREH_121113152548740.pdf 目标:R:\TECH\121113152548740.pdf”执行“重命名文件”操作。如果:对目标“项目:R:\TECH\CHG38415_PREI_121113152600640.pdf 目标:R:\TECH\121113152600640.pdf”执行“重命名文件”操作。如果:对目标“项目:R:\TECH\MCPTEST121125121201390.pdf 目标:R:\TECH\MCPTEST121125121201390.pdf”执行“重命名文件”操作。如果什么:对目标“项目:R:\TECH\PREHAND_38415_121121154127000.pdf 目标:R:\TECH\121121154127000.pdf”执行“重命名文件”操作。如果:对目标“项目:R:\TECH\PREIMP_38415_121121154140630.pdf 目标:R:\TECH\121121154140630.pdf”执行“重命名文件”操作。
这是使用StringSolver自动化工具的另一种方法。安装后,该mv
命令增加了半自动决策程序。
您将首先执行以下操作:
mv "1050_14447_Letter Extension.pdf" "Letter Extension.pdf"
然后你会问什么是广义转换:
mv --explain
它会告诉你类似 ``
连接文件名及其扩展名,从第一个单词开始,用 '.' 分隔
这还不是你想要的。您需要的是再举一个例子,例如:
mv --explain "25771_144_ 17Your file_name.pdf" " 17Your file_name.pdf"
在第二个 '_' + 常量字符串 '.' 之后开始的文件名 + 扩展
所以现在你可以这样做:
mv
它将执行转换。
免责声明:出于学术目的,我是该作品的合著者。其他示例可在youtube上找到。