我有各种文件名,以两种不同的方式分类。它们要么只有类似"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
) 将子字符串和扩展名放在一起,完成文件名。