删除文件名中第二个空格右侧的字符

时间:2012-11-02 20:25:10

标签: powershell

我会一直将文件从外部服务器复制到本地服务器。文件名的格式如下:

Example 1     Invoice MM500780 10 26 2012 3 52 15 PM.PDF
Example 2     Invoice PS100679-02 10 30 2012 9 31 35 AM.PDF
Example 3     Return RTN001116 10 26 2012 8 59 56 AM.PDF

我想通过修剪第二个空格(表示日期和时间)之后的任何字符来重命名所有文件。文件名应为:

Example 1     Invoice MM500780.PDF
Example 2     Invoice PS100679-02.PDF
Example 3     Return RTN001116.PDF

无论如何我可以创建一个powershell文件并通过任务管理器运行它吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

尝试:

dir c:\mydir -filter *.pdf | 
% {rename-item -path $_.fullname -newname ( ($_.name.split('')[0..1] -join ' ' ) + $_.Extension )}

答案 1 :(得分:1)

根据Christian的帖子,这是他的代码适合使用正则表达式模式匹配。

[regex]$regex = "\A\S*[\s]\S*"

dir c:\mydir -filter *.pdf | % {rename-item -path $_.fullname -newname ($regex.matches($_.BaseName)[0].value + $_.Extension )}

更改正则表达式以更改命名模式。使用正确的模式,您应该能够提取原始名称的任何部分以用作新名称。 模式是\字符串的开头,\ S非空白字符(*任意数字),\ s空格,\ S非空白字符(*任意数字)

答案 2 :(得分:0)

我相信你正在寻找的东西是这样的吗?

Split string with PowerShell and do something with each token

基本上你要在空格处分割文件名,然后将文件重命名为第一个和第二个标记中的任何内容。

答案 3 :(得分:0)

这款powershell单衬里应该可以满足您的需求。

Get-ChildItem | %{$splitName = $_.Name.Split(" ", 3); if($splitName.Length -gt 2) {$finalName = [string]::Join("",[string]::Join(" ",$splitName[0],$splitName[1]),$_.Extension); Rename-Item -Path $_.FullName -NewName $finalName}}