我每周都会收到大量文件,这些文件被批量保存到一个文件夹中。在将它们插入软件进行处理之前,我需要删除文件名称的日期方面,这些文件采用以下格式:
20082019AAAA
21082019AAAA
这些文件在同一天收到(例如),并保存到同一文件夹中。
我有一个简单的 PowerShell 代码,它删除了名称的日期前缀
get-childitem *.txt | rename-item -newname { [string]($_.name).substring(8) }
然而,出现了一个问题。
如果此代码要从两个文件中删除前 8 个字符,则两个文件都将被命名为 AAAA
因此,在运行时,文件最终看起来像这样:
AAAA
21082019AAAA
如您所见,只有其中一个文件的日期前缀被删除。
如何修改我的代码,以便在运行时删除前缀,并且如果它找到两个具有相同剩余名称的文件,它将_2
向文件添加一个或类似的东西?
这将真正提高效率,因为我可以直接指向文件夹进行自动处理。
亲切的问候
D
虽然我确信复制/移动/重命名增量有很多类似的问题:
## Q:\Test\2019\08\21\SO_57594000.ps1
# create some sample files in current dir
# -2..2|%{ni ('{0}AAAA.txt' -f (Get-Date).AddDays($_).ToString('ddMMyyyy'))}|Out-Null
Get-ChildItem *.txt | Where-Object Name -match '^\d{8}' | ForEach-Object{
$NewName = ($_.Name -replace '^\d{8}')
$cnt=0
while (Test-Path (Join-Path $_.Directory $NewName)){
$NewName = '{0}_{1}{2}' -f ($_.BaseName -replace '^\d{8}'),++$Cnt,$_.Extension
}
Rename-Item -Path $_.FullName -NewName $NewName
Write-Host -ForegroundColor Green ('Renamed {0} to {1}' -f $_.Name,$NewName)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句