首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文件名中删除特殊字符的批处理文件脚本(Windows)

从文件名中删除特殊字符的批处理文件脚本(Windows)
EN

Stack Overflow用户
提问于 2008-11-04 10:54:46
回答 5查看 86.6K关注 0票数 10

我有一大组文件,其中一些文件在文件名中包含特殊字符(例如,,%和其他)。我希望脚本文件在这些文件上迭代并重命名它们,删除特殊字符。我真的不介意它做什么,但是它可以用下划线来代替。

圣容%20.doc将被重命名为St_rung_20.doc

按优先次序:

required)

  • Another脚本文件与cscript (Vbs)

  • 一起运行的一个第三方软件,可以从命令行运行(即没有用户交互的语言脚本文件,为此我必须安装额外的脚本引擎)。

背景:我试图在Windows上用GnuPG加密这些文件,但它似乎不处理文件名中的特殊字符,而使用-- encrypt选项。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-06 14:14:01

感谢托马拉克,他为我指明了正确的方向。我想我应该在这里贴个完整的帖子。

问题似乎是GPG使用的代码页是固定的(拉丁文I),独立于控制台中配置的代码页。但一旦他指出了这一点,我就想出了解决办法。

诀窍是在生成文件列表之前更改代码页。这实际上会使文件列表在控制台中查看时看起来不正确。然而,当传递给GPG时,它工作得很好。GPG接受这些文件,并将带有正确文件名的已嵌入文件吐出。

批处理文件如下所示:

代码语言:javascript
复制
chcp 1252
dir /b /s /a-d MyFolder >filelist.txt
gpg -r test@test.com --encrypt-files <filelist.txt
票数 3
EN

Stack Overflow用户

发布于 2008-11-04 11:13:47

在将文件名提供给gnupg之前,您是否尝试过将cmd.exe设置为另一个代码页?发出chcp 65001预先将cmd.exe设置为Unicode,然后再试一次。

如果失败,下面的VBScript将执行此操作:

代码语言:javascript
复制
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

就这样说吧:

代码语言:javascript
复制
cscript replace.vbs "c:\path\to\my\files"

还可以在中将文件夹拖放到上面。

票数 5
EN

Stack Overflow用户

发布于 2008-11-04 11:14:02

来自http://www.robvanderwoude.com/bht.html

使用NT集合的字符串替换来替换或删除字符串中的任何位置的字符:

代码语言:javascript
复制
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、ü、但也是á,à,é,è.)分开。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/261515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档