我有一大组文件,其中一些文件在文件名中包含特殊字符(例如,,%和其他)。我希望脚本文件在这些文件上迭代并重命名它们,删除特殊字符。我真的不介意它做什么,但是它可以用下划线来代替。
圣容%20.doc将被重命名为St_rung_20.doc
按优先次序:
required)
背景:我试图在Windows上用GnuPG加密这些文件,但它似乎不处理文件名中的特殊字符,而使用-- encrypt选项。
发布于 2008-11-06 14:14:01
感谢托马拉克,他为我指明了正确的方向。我想我应该在这里贴个完整的帖子。
问题似乎是GPG使用的代码页是固定的(拉丁文I),独立于控制台中配置的代码页。但一旦他指出了这一点,我就想出了解决办法。
诀窍是在生成文件列表之前更改代码页。这实际上会使文件列表在控制台中查看时看起来不正确。然而,当传递给GPG时,它工作得很好。GPG接受这些文件,并将带有正确文件名的已嵌入文件吐出。
批处理文件如下所示:
chcp 1252
dir /b /s /a-d MyFolder >filelist.txt
gpg -r test@test.com --encrypt-files <filelist.txt发布于 2008-11-04 11:13:47
在将文件名提供给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就这样说吧:
cscript replace.vbs "c:\path\to\my\files"还可以在中将文件夹拖放到上面。
发布于 2008-11-04 11:14:02
来自http://www.robvanderwoude.com/bht.html
使用NT集合的字符串替换来替换或删除字符串中的任何位置的字符:
SET STRING=[ABCDEFG]
SET STRING=%STRING:[=%
SET STRING=%STRING:]=%
ECHO String: %STRING%
will display
String: ABCDEFG
SET STRING=[ABCDEFG]
SET STRING=%STRING:[=(%
SET STRING=%STRING:]=)%
ECHO String: %STRING%
will display
String: (ABCDEFG)
SET STRING=[ABCDEFG]
SET STRING=%STRING:~1,7%
ECHO String: %STRING%
will display
String: ABCDEFG如果您使用这一尝试,您将必须处理每个您想要替换的字符(例如,é、you、but、ü、但也是á,à,é,è.)分开。
https://stackoverflow.com/questions/261515
复制相似问题