从powershell中删除特殊字符
问题描述:
因此,我目前正在尝试将大量终端用户文件从NTFS迁移到MS OneDrive。我面临的问题是,OneDrive不支持文件名中的特殊字符,并且这些文件会与它们混杂在一起。从powershell中删除特殊字符
所以这个想法是将文件和文件夹结构复制到一个新的目的地,并运行一个PS脚本来重命名它们,并从它们中删除所有特殊字符。
Get-childobject -recurse
接缝在这里是最好的选择。
我可以使用的东西沿着线重命名一个文件:
$newname = $oldname.replace ("&"," and ")
$newname = $newname.replace (" & "," and ")
$newname = $newname.replace ("/"," ")
#etc...
但是我不能肯定就如何我要么管或支架上这些结合在一起,如果它甚至可能吗?
还是有我忽略的东西,这是更简单吗?
任何帮助,非常感谢!
答
为了总结多个替换操作一起,一个可以包裹[String]
的Replace()
方法等:
$newName = $oldName.Replace("&", "and").Replace("_", "-") #etc.
,或者使用PowerShells内置-replace
操作者:
$newName = $oldname -replace "&", "and" -replace "_", "-" #etc.
一般配合字符串到约定有是像[uri]::EscapeDataString()
这样的方法。我不确定OneDrive和他们的文件名称惯例,但可以想象他们必须转换为互联网URL。
为了使其更具可读性一个可以建立一个HashTable
类似如下:
$replacements = @{
"&" = "and";
"_" = "-";
"/" = "-";
}
$fileName = "Actually/IsSupportedByNeitherNTFSNorOneDrive"
$replacements.Keys | ForEach-Object {$fileName = $fileName.replace($_, $replacements[$_])}
Write-Output $fileName
#Actually-IsSupportedByNeitherNTFSNorOneDriveandsomeOthers
您好,欢迎*上。请花一些时间阅读帮助页面,尤其是名为[“我可以询问什么主题?”(http://*.com/help/on-topic)和[“我应该问什么类型的问题避免问?“](http://*.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackexchange.com/q/156810/204922)。您可能还想了解[最小,完整和可验证示例](http://*.com/help/mcve)。 – Clijsters
_Get-childobject -recurse接缝在这里是最好的选择_一旦你没有安装任何扩展模块,就没有'Get-ChildObject'。另外,NTFS不支持文件名中的'/'。 – Clijsters