3

我在具有这种命名约定的目录中有大量文件:“1050_14447_Letter Extension.pdf”等。我需要删除第二个下划线(包括第二个下划线)之前的所有字符。所以新的文件名是“Letter Extension.pdf”。如何相应地迭代单个目录重命名?

4

5 回答 5

6

这是一个重命名当前目录中所有 pdf 文件的示例,从文件名中删除所有前导数字或下划线:

Get-ChildItem -Filter *.pdf | Rename-Item -NewName {$_.Name -replace '^[0-9_]+'}
于 2012-11-30T15:08:49.710 回答
1

这是另一种不依赖正则表达式但假定文件路径中没有下划线的方法:

Get-ChildItem 'C:\path2files' | %{
    Rename-Item $_.fullname $_.Name.Split("_")[2]
    }
于 2012-11-30T18:01:07.203 回答
0

给定一个像“1050_14447_Letter Extension.pdf”这样的字符串,这是一种方法:

$foo = "1050_14447_Letter Extension.pdf"
$foo -replace '^.*_.*_(.*)$', '$1'
于 2012-11-30T15:05:02.890 回答
0

这将处理文件名中任意数量的下划线(忽略路径)并在生成新名称时跳过所有内容,包括最后一个下划线:-

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”执行“重命名文件”操作。

于 2012-12-01T23:23:37.177 回答
0

这是使用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上找到。

于 2014-03-14T17:13:30.927 回答