在文件共享上批量重命名

在文件共享上批量重命名

我们目前有一个由 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 
}

相关内容