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

RKi*_*azy 1 regex powershell powershell-2.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
Run Code Online (Sandbox Code Playgroud)

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

ajk*_*ajk 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
}
Run Code Online (Sandbox Code Playgroud)