我们目前有一个由 SAN 设备托管的 CIFS 共享,并计划转向案例管理系统。我遇到的问题是,我们的文件共享中的许多文件以尾随点 (.) 结尾,并且无法上传。
我一直在尝试编写一个脚本,该脚本可以保持文件名不变,但批量删除所有尾随的点。我能够使用 powershell 对各种特殊字符执行此操作。
我们还有许多子文件夹,其文件夹名称中间有一个点 (.),需要将其保留不变。
例子
原始文件名:20151101 Luis K. Abrishamian MD.pdf
新文件名:20151101 Luis K. Abrishamian MDpdf
我用这个从文件名中删除所有&
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("&", "and") }
我试过这个,但它没有达到我的要求
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("*.", "") }
答案1
请尝试以下操作:
Get-ChildItem -recurse -name | ForEach-Object { If($_.Substring($_.Length-1) -eq ".") { Move-Item $_ $_.Substring(0,$_.Length-1) } }
这将获取每个项目,检查最后一个字符是否为.
,如果是,则将其移动到没有最后一个字符的相同名称。
答案2
你可以尝试
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ ([regex]::Replace($_, "\.$" , "")) }
答案3
来自 powershell.org 的一位匿名人士
# Replace '..' from names (remove one dot)
Get-ChildItem -Recurse -Path .\my\path | Rename-Item -NewName {$_.name -replace '\.\.','.'} -WhatIf
答案4
对我来说没有单行的。
foreach ($file in (Get-ChildItem 'C:\test' -Recurse) ){
$newName = $file.DirectoryName + '\' + ( $file.Basename.replace('.', '').replace('&', 'and') ) + $file.Extension
move-item $file.FullName $newName
}