0

我将始终将文件从外部服务器复制到本地服务器。文件名采用以下格式:

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

4 回答 4

2

尝试:

dir c:\mydir -filter *.pdf | 
% {rename-item -path $_.fullname -newname ( ($_.name.split('')[0..1] -join ' ' ) + $_.Extension )}
于 2012-11-02T20:57:45.747 回答
1

根据 Christian 的帖子,这是他的代码,适用于使用 Regex 模式匹配。

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

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

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

于 2012-11-03T11:39:42.963 回答
0

我相信你正在寻找的是这些方面的东西?

使用 PowerShell 拆分字符串并对每个令牌执行一些操作

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

于 2012-11-02T20:39:59.907 回答
0

这个 powershell one liner 应该可以满足您的需求。

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}}
于 2012-11-02T20:57:46.300 回答