我有100+文件名,这些文件名是从具有隐藏特殊字符的程序中创建的。在windows资源管理器中,文件名看起来是正确的,但是将文件名复制并粘贴到一个程序中,如notepad++粘贴,文件名两端都有?'s‘.通过右键单击、删除文件名和重新键入文件名来手动重命名文件名,从而解决了问题。为了查看额外的字符,我必须将notepad++中的编码从UTF-8切换到ANSI。在帮助下,我已经识别了尾随的'?’。作为id 65279,或者BOM。这是什么焦炭? 65279 '‘
我需要加载文件回程序,但由于隐藏的特殊字符,程序没有看到他们正确阅读。
有没有一种方法可以使用PowerShell来清除文件?理想情况下,只有隐藏的特殊字符被删除,文件名的其余部分(包括下划线)被单独保留。文件名冲突不应成为当前情况下的问题,但如果出现异常,则自动覆盖将是一个很好的解决方案。输出文件名由包含以下内容的java脚本生成:
var objName = f[myCounter].contents.replace(/ /g,"_").toLowerCase();
app.pngExportPreferences.pageString = curPage.name;
var myFilePath = myDoc.filePath + "/" + objName + ".png"; //export to a folder of the current document
var myFile = new File(myFilePath);
myDoc.exportFile(ExportFormat.PNG_FORMAT, myFile, false);
万一问题在那里更容易解决。我对PowerShell和javascript非常陌生。
我已经尝试了一些我找到的PowerShell脚本,包括:
dir -Recurse | ?{$_.Name -match $re} | %{ren -literalpath $_.FullName -newname (join-path (get-item $_.PSPArentPath) $($_.Name -replace $re,""))}
gci *.png | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '}
他们没有删除隐藏的特殊人物。
发布于 2019-08-16 20:57:50
要用此问题复制文件名,请执行以下操作:
echo hi > ([char]65279 + 'hithere' + [char]65279 + '.txt')
试试这个。如果它看起来不错,那么在重命名项目之后去掉-whatif,这样它实际上就会生效。
dir | foreach {
$name = $_.name
$chars = [char[]]$name | where { $_ -in [char]' '..[char]'~' } # printable ascii
$newname = -join $chars # make a string again
# $newname = $name -replace '[^ -~]' # alternative
if ($newname.length -lt $name.length) { # ascii name is smaller
$_ | rename-item -newname $newname -whatif
}
}
参考文献:http://facweb.cs.depaul.edu/sjost/it212/documents/ascii-pr.htm
https://stackoverflow.com/questions/57530338
复制相似问题