尝试更改命名文件的格式
Trying to change format for named files
我有一个文件夹,其中包含从我们的交换服务器中提取的 .VCF 文件。目前,它们被命名为邮箱的设置方式:Lastname, Firstname MI
。我需要将它们重命名为 FirstName.LastName
.
如何让 PowerShell 读取文件名,将 ", "
之前的字符存储为姓氏,然后取下一个 " "
之前剩下的字符(如果有是一个)以上面指定的格式重命名文件?
这就是发明正则表达式的目的。像这样的事情应该做你想做的事:
Get-ChildItem 'C:\temp\a\*.vcf' | % {
$newname = $_.Name -replace '^(.*?), (.*?)(?: .*)?(\.vcf)', '.'
Rename-Item -Path $_.FullName -NewName $newname
}
正则表达式分解:
^(.*?),
匹配字符串开头 (^
) 和逗号之间的任何字符 (.
) 的最短序列。括号将实际匹配 (.*?
) 分组,因此可以在替换字符串(捕获组)中引用它。
, (.*?)
匹配逗号和 space 之后但下一个表达式之前的任何字符 (.
) 的最短序列。同样,匹配被分组,因此可以在替换中引用它。
(?: .*)?
匹配 space 后跟任意数量的字符。尾随 ?
使此匹配可选(可以出现零次或一次)。 (?:)
是一个非捕获组(与从上方捕获组相反)。这是为了允许在不污染引用列表的情况下对您不想引用的(子)表达式进行分组。
(\.vcf)
匹配文件扩展名(文字点后跟字符串 vcf
),同样在捕获组中。考虑一下,我应该添加一个尾随 $
((\.vcf)$
) 来将该子表达式锚定在字符串的末尾。
- 替换字符串
.
然后组合三个组,通过交换第一个和第二个引用的顺序来颠倒名字和姓氏的顺序。
我有一个文件夹,其中包含从我们的交换服务器中提取的 .VCF 文件。目前,它们被命名为邮箱的设置方式:Lastname, Firstname MI
。我需要将它们重命名为 FirstName.LastName
.
如何让 PowerShell 读取文件名,将 ", "
之前的字符存储为姓氏,然后取下一个 " "
之前剩下的字符(如果有是一个)以上面指定的格式重命名文件?
这就是发明正则表达式的目的。像这样的事情应该做你想做的事:
Get-ChildItem 'C:\temp\a\*.vcf' | % {
$newname = $_.Name -replace '^(.*?), (.*?)(?: .*)?(\.vcf)', '.'
Rename-Item -Path $_.FullName -NewName $newname
}
正则表达式分解:
^(.*?),
匹配字符串开头 (^
) 和逗号之间的任何字符 (.
) 的最短序列。括号将实际匹配 (.*?
) 分组,因此可以在替换字符串(捕获组)中引用它。, (.*?)
匹配逗号和 space 之后但下一个表达式之前的任何字符 (.
) 的最短序列。同样,匹配被分组,因此可以在替换中引用它。(?: .*)?
匹配 space 后跟任意数量的字符。尾随?
使此匹配可选(可以出现零次或一次)。(?:)
是一个非捕获组(与从上方捕获组相反)。这是为了允许在不污染引用列表的情况下对您不想引用的(子)表达式进行分组。(\.vcf)
匹配文件扩展名(文字点后跟字符串vcf
),同样在捕获组中。考虑一下,我应该添加一个尾随$
((\.vcf)$
) 来将该子表达式锚定在字符串的末尾。- 替换字符串
.
然后组合三个组,通过交换第一个和第二个引用的顺序来颠倒名字和姓氏的顺序。