在重命名文件时移动项目,并使用正则表达式“清理”文件名

时间:2012-03-23 17:37:33

标签: regex powershell powershell-v2.0

我正在使用脚本将文件从一个目录移动到另一个目录。它还通过一些RegEx工作剥离了一些文本。然而,虽然我有一个相对较短的脚本,但我认为我仍然可以做得更好。以下是我的示例脚本。

$Source = "C:\temp\test\source"
$Dest = "C:\temp\test\dest"

get-childitem $Source\*.* | rename-item -newname {$_.name -replace '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}IP\.',''} -WhatIf
move-item $Source\*.* $Dest -WhatIf

现在,这可行,但正如你所看到的,它是两行,我很确定它可以在一个中完成。我认为我从move-item命令中“没有得到我的钱”。如何在不必单独执行rename-item命令的情况下完成此操作?如果您需要更多信息,请告诉我,我会看到我能做些什么。我是PS和RegEx的新手。我更多地处理批处理文件,但我不认为它可以处理RegEx。这就是我尝试PS的原因。

1 个答案:

答案 0 :(得分:5)

您可以在Move-Item cmdlet的destination参数上使用正则表达式替换。那应该为你做的工作。调整你的例子:

$Source = "C:\temp\test\source"
$Dest = "C:\temp\test\dest"

get-childitem $Source | Foreach-Object {
  Move-Item -Path $_.FullName -Destination "$Dest\$($_.name -replace '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}IP\.','')" -WhatIf
}