所以我目前正在尝试将大量的最终用户文件从NTFS迁移到MS OneDrive。我面临的问题是OneDrive不支持文件名中的特殊字符,并且这些文件都充满了它们。
因此,我们的想法是将文件和文件夹结构复制到新目的地并运行PS脚本将其全部重命名,并从中删除所有特殊字符。
Get-childobject -recurse
接缝是这里最好的选择。
我可以使用以下内容重命名单个文件:
$newname = $oldname.replace ("&"," and ")
$newname = $newname.replace (" & "," and ")
$newname = $newname.replace ("/"," ")
#etc...
但是,我不确定如何将这些管道或支架组合在一起,如果可能的话?
或者有什么我忽视的东西要简单得多吗?
非常感谢任何帮助!
答案 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