njr*_*101 10 windows filenames gnupg batch-file file-rename
我有一大堆文件,其中一些文件包含特殊字符(例如ä,ö,%和其他).我想要一个脚本文件迭代这些文件并重命名它们删除特殊字符.我真的不介意它做什么,但它可以用下划线代替它们,例如
Störung%20.doc将重命名为St_rung_20.doc
按优先顺序排列:
背景:我正在尝试使用Windows上的GnuPG加密这些文件,但它似乎没有使用--encrypt-files选项处理文件名中的特殊字符.
在将文件名提供给gnupg之前,您是否尝试将cmd.exe设置到另一个代码页中?问题chcp 65001是事先将cmd.exe设置为Unicode并再试一次.
如果失败,以下VBScript将执行此操作:
Option Explicit
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim invalidChars: Set invalidChars = New RegExp
' put all characters that you want to strip inside the brackets
invalidChars.Pattern = "[äöüß&%]"
invalidChars.IgnoreCase = True
invalidChars.Global = True
If WScript.Arguments.Unnamed.Count = 0 Then
WScript.Echo "Please give folder name as argument 1."
WScript.Quit 1
End If
Recurse fso.GetFolder(WScript.Arguments.Unnamed(0))
Sub Recurse(f)
Dim item
For Each item In f.SubFolders
Recurse item
Sanitize item
Next
For Each item In f.Files
Sanitize item
Next
End Sub
Sub Sanitize(folderOrFile)
Dim newName: newName = invalidChars.Replace(folderOrFile.Name, "_")
If folderOrFile.Name = newName Then Exit Sub
WScript.Echo folderOrFile.Name, " -> ", newName
folderOrFile.Name = newName
End Sub
Run Code Online (Sandbox Code Playgroud)
这样叫:
cscript replace.vbs "c:\path\to\my\files"
Run Code Online (Sandbox Code Playgroud)
您还可以在Windows资源管理器中将文件夹拖放到该文件夹中.
感谢托马拉克,他实际上为我指明了正确的方向。为了完整起见,我想在这里发帖。
问题似乎是 GPG 使用的代码页是固定的(拉丁 I),独立于控制台中配置的代码页。但一旦他指出了这一点,我就想出了如何解决这个问题。
诀窍是在生成文件列表之前更改代码页。这实际上会使文件列表在控制台中查看时显得不正确。然而,当传递给 GPG 时,它工作得很好。GPG 接受文件并输出具有正确文件名的加密文件。
批处理文件看起来像这样:
chcp 1252
dir /b /s /a-d MyFolder >filelist.txt
gpg -r test@test.com --encrypt-files <filelist.txt
Run Code Online (Sandbox Code Playgroud)