我需要批量重命名文件共享中的文件
~
和目标是用简单的 代替波浪号-
,保留文件扩展名(如果有),但将其转换为小写字母。
我在找到文件的脚本的第一部分取得了成功
$PATH = "\\<Fileservername>\<Folder>\"
$pattern = "*~*"
Get-ChildItem $PATH -Recurse | where {$_.Name -like $pattern}
我正在努力解决脚本的第二部分重命名。我在这里找到了两个主题:
我无法根据我的需要调整这些解决方案,而且可能需要采取额外的步骤来将给定的文件名从大写字母转换为小写字母,或者如果文件没有文件扩展名则跳过此步骤。
一个例子是重命名ACUJLH~H
来ACUJLH-H
和KYA3BM~Q.PDF
到KYA3BM-Q.pdf
。
这是我的贡献。我已将-File
开关添加到Get-ChildItem
cmdlet,因此它只会查找文件,而不会尝试处理目录名称。此外,我已将替换模式更改为~+
具有重复波浪号的文件将被替换为单个-
字符。(KYA3BM~~~~Q.PDF
变成KYA3BM-Q.pdf
)
$path = "D:\Code\PowerShell\StackOverflow"
$pattern = "*~*"
Get-ChildItem $path -Recurse -File | Where-Object {$_.Name -like $pattern} |
ForEach-Object {
$directory = $_.DirectoryName # or [System.IO.Path]::GetDirectoryName($_.FullName) or use Split-Path $_.FullName -Parent
$filename = $_.BaseName -replace '~+', '-' # or [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -replace '~+', '-'
$extension = $_.Extension # or [System.IO.Path]::GetExtension($_.Name)
if (![string]::IsNullOrEmpty($extension)) { $filename += $extension.ToLower() }
$newname = Join-Path -Path $directory -ChildPath $filename
Rename-Item -LiteralPath $_.FullName -NewName $newName -Force
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句