从powershell中的文件名中删除特殊字符

时间:2017-11-25 11:59:07

标签: powershell

所以我目前正在尝试将大量的最终用户文件从NTFS迁移到MS OneDrive。我面临的问题是OneDrive不支持文件名中的特殊字符,并且这些文件都充满了它们。

因此,我们的想法是将文件和文件夹结构复制到新目的地并运行PS脚本将其全部重命名,并从中删除所有特殊字符。

Get-childobject -recurse接缝是这里最好的选择。

我可以使用以下内容重命名单个文件:

$newname = $oldname.replace ("&"," and ")
$newname = $newname.replace (" & "," and ")
$newname = $newname.replace ("/"," ")
#etc...

但是,我不确定如何将这些管道或支架组合在一起,如果可能的话?

或者有什么我忽视的东西要简单得多吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

要将多个替换操作包装在一起,可以将[String]的{​​{3}}方法包装起来:

$newName = $oldName.Replace("&", "and").Replace("_", "-") #etc.

或使用PowerShells内置Replace()运算符:

$newName = $oldname -replace "&", "and" -replace "_", "-" #etc.

为了使字符串符合惯例,有[uri]::EscapeDataString()等方法。我不确定OneDrive及其文件名约定,但可以想象它们必须可转换为Internet URL。

为了使其更具可读性,可以构建如下所示的-replace

$replacements = @{
    "&" = "and";
    "_" = "-";
    "/" = "-";
}
$fileName = "Actually/IsSupportedByNeitherNTFSNorOneDrive"
$replacements.Keys | ForEach-Object {$fileName = $fileName.replace($_, $replacements[$_])}
Write-Output $fileName
#Actually-IsSupportedByNeitherNTFSNorOneDriveandsomeOthers