【发布时间】:2020-10-18 10:52:20
【问题描述】:
我正在尝试自动重命名 Windows 7 目录中的多个文件。我需要搜索源索引文件(.txt 或 .csv,它是扩展文件名的列表),并且在与原始文件名部分匹配的情况下,复制前 12 个字符(索引中相关字符串的文件)并相应地重命名原始文件(并保留原始文件扩展名)。
例如
(a) 当前在 Windows 目录中的文件命名如下(数百个文件):
- 23456abc.doc
- 76543cab.doc
- 92837bca.doc
(b) .txt/.csv 文件中的值如下(数百个值 - 注意:这些没有文件扩展名):
- BetterName1.RandomText1.23456abc.MoreRandomText1
- BetterName2.RandomText2.76543cab.MoreRandomText2
- BetterName3.RandomText3.92837bca.MoreRandomText3
(c) 期望的结果是文件被自动重命名如下:
[通过在 (b) 中的值列表中搜索 (a) 中的文件名,如果匹配,则返回前 12 个字符作为新文件名,同时保留原始文件扩展名]
- BetterName1.doc
- BetterName2.doc
- BetterName3.doc
注意:我的偏好是使用 .txt 格式的索引文件进行查找。但是有需要我也可以使用 .csv
我以前从未使用过 PowerShell,并且是 Windows 批处理脚本的新手。我四处搜索并试图将代码的 sn-ps 拼凑成一个 Windows 批处理脚本(也尝试了一个 PowerShell 脚本)来实现这一点,但我在这方面的知识严重缺乏,所以不幸的是我仍在努力解决问题。
任何帮助将不胜感激。提前谢谢你。
附:这是我尝试使用但无济于事的 PowerShell 脚本。
$fdPath = 'C:\TEST\Data'
$sourcelistFiles = Get-ChildItem -Path $FDPATH\*.txt | ForEach-Object {$_.user } FullName
$findReplaceList = Import-Csv -Path $FDPATH\AllNames.csv
$totalitems = $sourcelistFiles.count
$currentrow = 0
foreach ($sourcelistFile in $sourcelistFiles)
{
$currentrow += 1
Write-Progress -Activity "Processing record $currentrow of $totalitems" -Status "Progress:" -PercentComplete (($currentrow / $totalitems) * 100)
[string] $txtSourceListFile = Get-Content $sourcelistFile | Out-String
ForEach ($findReplaceItem in $findReplaceList)
{
$txtSourceListFile = $txtSourceListFile -replace "$($findReplaceitem.FindString)", "$($findReplaceitem.ReplaceString)"
}
$txtSourceListFile | Set-Content ($sourcelistFile)
-NoNewLine
}
【问题讨论】:
标签: windows powershell loops scripting batch-rename