【发布时间】:2019-08-16 19:47:37
【问题描述】:
我有 100 多个由具有隐藏特殊字符的程序创建的文件名。在 Windows 资源管理器中,文件名看起来是正确的,但是将文件名复制并粘贴到诸如 notepad++ 之类的程序中时,两端都带有 ?。即,?文件名?。通过右键单击、删除文件名并重新输入文件名来手动重命名文件名可以解决问题。为了看到多余的字符,我必须将 notepad++ 中的编码从 UTF-8 切换到 ANSI。在帮助下,我确定了尾随的“?”作为 id 65279,或 BOM。 What is this char? 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 '_+', ' '}
他们没有删除隐藏的特殊字符。
【问题讨论】:
标签: windows powershell