基于分隔符删除文件名的一部分

时间:2019-06-10 15:54:37

标签: powershell ms-word

我有各种文件名,它们以两种不同的方式分类。它们要么只是一个代码:“ 866655”,要么包含一个后缀和前缀“ eu_866655_001”。我希望将具有相同格式的文件名写入文本文件。我找不到能成功删除后缀和前缀的方法。

目前,这是我在Powershell循环中所拥有的:

$docs = Get-ChildItem -Path $source | Where-Object {$_.Name -match '.doc*'}

if ($docs.basename -contians 'eu_*')
{
 Write-Output ([io.fileinfo]"$doc").basename.split("_")
}

我希望使用“ _”作为分隔符,将“ eu_866655_001”转换为“ 866655”。

我知道答案正在盯着我,但我似乎仍然无法弄清楚。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作。随时调整-Filter命令中的Get-ChildItem

$source = 'c:\path\*'
$docs = Get-ChildItem -Path $source -File -Filter "*_*_*" -Include '*.doc','*.docx'
$docs | Rename-Item -NewName { "{0}{1}" -f $_.Basename.Split('_')[1],$_.Extension }

要记住的重要事情是,要使用-Include开关,您需要在*值的末尾添加一个-Path

说明:

  • -Filter使我们能够过滤包含两个下划线并将三个子字符串分隔开的名称。
  • -Include仅允许我们列出扩展名为.docx.doc的文件。
  • Rename-Item -NewName支持延迟脚本绑定。这使我们可以使用脚本块对每个管道对象(每个文件)执行任何必要的操作。
  • 由于目标文件将始终带有两个下划线,因此.Split('_')方法将导致三个由_分隔的索引数组。您已指定始终要使用第二个带分隔符的子字符串,并且该子字符串由索引1([1])表示。
  • 格式运算符(-f)将子字符串和扩展名放在一起,从而完成文件名。