如何解决在win10上递归替换文件夹和文件中的非标准字符
我有很多文件夹,里面有我从同事那里得到的文件的子文件夹,这些文件有这样的特殊甚至隐藏字符:
非标准字符:{µ,市,',&,「,invisible char,Ü,é,... }
我正在寻找可以重命名所有子文件夹的脚本或 Windows 工具 和文件一次通过根据列表 X 中的字符将任何非标准字符替换为标准字符。奖励:如果工具会检查列表 R 并使用替换规则(如果定义了一个),那就更好了。如果不是,它应该用“_”替换非标准字符。
List X: {A-Z,a-z,0-9,(,),[,],-,_}
List R: {é->e,ü->u,ä->a,@->at,...} (Replacement rules)
感谢对工具或脚本的任何提示。
解决方法
这个怎么样?替换特定字符,然后是不在空格和波浪号或制表符之间的任何字符,例如 unicode 雪人。
echo hi | set-content filä.txt,filé.txt,fil☃.txt # in script or ise
$pairs = ('ä','a'),('é','e'),('[^ -~\t]','_')
dir -r | where name -match '[^ -~\t]' | rename-item -newname {
$name = $_.name
foreach ($pair in $pairs) {
$name = $name -replace $pair
}
$name
} -whatif
What if: Performing the operation "Rename File" on target "Item:
C:\users\admin\foo\filä.txt Destination: C:\users\admin\foo\fila.txt".
What if: Performing the operation "Rename File" on target "Item:
C:\users\admin\foo\filé.txt Destination: C:\users\admin\foo\file.txt".
What if: Performing the operation "Rename File" on target "Item:
C:\users\admin\foo\fil☃.txt Destination: C:\users\admin\foo\fil_.txt".
,
我会解析文件/目录名称,如果每个字符不在 ascii 范围内,请将其替换为任意字符。您可以使用以下内容,并在其基础上使用列表 X 和列表 R 项目的哈希表进行构建。
filter ConvertTo-FileSafe {
$userString = [char[]]$_
$charToReplaceWith = '.'
for ($currentChar = 0; $currentChar -lt $userString.Length; $currentChar++) {
if ([System.IO.Path]::GetInvalidFileNameChars().Contains($userString[$currentChar])){
$userString[$currentChar] = $charToReplaceWith
}
$previousChar = $userString[$currentChar]
}
return ($userString -join '')
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。