我有各种文件名,它们以两种不同的方式分类。它们要么只是一个代码:“ 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”。
我知道答案正在盯着我,但我似乎仍然无法弄清楚。
答案 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
)将子字符串和扩展名放在一起,从而完成文件名。