我正在尝试将一堆文件从Windows目录移动到sharepoint,需要重命名目标文件系统上不允许的文件和目录名。
我需要完成我在此处找到的任务所需的大部分内容: Replacing all # in filenames throughout subfolders in Windows
Get-ChildItem -Filter "*`#*" -Recurse |
Rename-Item -NewName {$_.name -replace '#','No.' } -Verbose
evilSnobu提供的解决方案就像这些角色的魅力一样〜,#,%,&
sharepoint上不允许的其他字符应该是:+,*,{,},\,:,<,>,?,/,|,“
我并不是很确定首先在源窗口文件系统上允许哪些,但是" +"很显然,很多文件名中都有这个字符。
对于那些我从PowerShell收到错误的人说它使正则表达式无效。不幸的是,这对于使用该字符或使用等效的ascii代码进行删除是真的。
Get-ChildItem -Filter "*`+*" -Recurse |
>> Rename-Item -NewName {$_.name -replace '+','_' } -Verbose
不幸的是,这不起作用。关于如何处理这些问题的任何想法?
谢谢蒂姆
答案 0 :(得分:1)
我当前清除文件名/路径的方法是:
private static void checkSurrounding(char[][] list, int x, int y) {
for(int dx = -1; dx <= 1; dx++) {
if ((x + dx >= 0) && (x + dx < list.length)) {
for(int dy = -1; dy <= 1; dy++) {
if ((y + dy >= 0) && (y + yd < list[x + dx].length) && (!(dx == 0 && dy == 0))) {
System.out.print(list[x + dx][y + dy]);
}
}
}
}
}
这对当前的操作系统无效字符使用.NET功能(因为.NET现在不仅可以在Windows上运行)。它将用$Path.Split([IO.Path]::GetInvalidFileNameChars()) -join '_'
替换所有无效字符。
答案 1 :(得分:1)
Rename-Item -NewName {$_.name -replace '\+','_' } -Verbose
当我想将我的“文件名(1)”减少到“文件名”时,解决我的问题真是太棒了。
我只是将脚本修改为:
Rename-Item -NewName {$_.name -replace '\(1\)','' } -Verbose
它确实解决了麻烦的体力劳动。