在 Windows PowerShell 中替换文件名中的特殊字符

TIM*_*TIM 4 regex powershell

我试图将一堆文件从 Windows 目录移动到共享点,需要重命名目标文件系统上不允许的文件和目录名称。

我在这里找到的大部分任务都需要完成: Replace all # in filenames through subfolders in Windows

Get-ChildItem -Filter "*`#*" -Recurse |
Rename-Item -NewName {$_.name -replace '#','No.' } -Verbose
Run Code Online (Sandbox Code Playgroud)

evilSnobu 提供的解决方案对这些字符 ~、#、% 和

sharepoint 上不允许的其他字符应该是:+、*、{、}、\、:、<、>、?、/、|、“

我不确定首先在源 Windows 文件系统上允许哪些文件,但是“+”是并且显然很多文件名都包含该字符。

对于那些我从 PowerShell 收到一个错误,说它使正则表达式无效。不幸的是,这对于使用字符或用等效的 ascii 代码对其进行转义是正确的。

Get-ChildItem -Filter "*`+*" -Recurse |
>> Rename-Item -NewName {$_.name -replace '+','_' } -Verbose
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用。关于如何处理这些的任何想法?

谢谢蒂姆

hsi*_*mah 8

我目前清理文件名/路径的方法是这样做:

$Path.Split([IO.Path]::GetInvalidFileNameChars()) -join '_'
Run Code Online (Sandbox Code Playgroud)

这将 .NET 函数用于当前操作系统的无效字符(因为 .NET 现在不仅仅在 Windows 上运行)。它将用_.