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



我有各种文件名,以两种不同的方式分类。它们要么只有类似"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"。

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

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

$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) 将子字符串和扩展名放在一起,完成文件名。