windows - 批量字符转义

标签 windows batch-file cmd scripting escaping

我相当精通为 Windows 编写批处理脚本,但即使过了这么多年,如何正确转义字符仍让我感到困惑。当试图找出正确的方法来转义与 sed 一起使用的正则表达式时,这尤其困难。有什么工具可以帮助我吗?也许可以让我粘贴一个“普通”字符串,然后它会吐出该字符串的正确转义版本?

更新:我不愿意举个例子,因为我不是在寻找关于如何转义一个特定字符串的答案。我也不是在寻找适用于某个特定应用程序的解决方案。我正在寻找一种工具,它可以帮助我为我需要转义的每个字符串获得正确的转义语法,无论什么工具可能从命令行使用它。

话虽如此,我真正想要的正则表达式是

(^.*)(Form Product=")([^"]*") FormType="[^"]*" FormID="([0-9][0-9]*)".*$

采用真正的正则表达式(即就 BATCH 而言未转义)并将其包装在一些 sed 语法中,例如 ssed "s@ --- Insert escaped regex here --- @http://psph/\1/\2@g""%~1" 并最终转义它...同样,是否有任何工具可以帮助转义任何字符串以在 BATCH 命令行上使用?

附注BATCH 的转义语法有太多异常(exception),我什至会满足于一个好的备忘单。

最佳答案

作为dbhenham points out in this comment ,可以在 this answer 的部分内容中找到(更多)更详细的答案(最初由另一个用户 jeb 编写,之后由 dbhenham 进行了大量编辑和更新)关于一个相关但更普遍的问题:

请注意,根据 dbhenham,这个答案是:

incorrect, misleading, and incomplete

我认为这个答案对于几乎所有情况来说仍然足够好,但是根据一个人的确切字符转义需求和这个答案的局限性,可能需要仔细阅读上面的答案。

其余部分经作者许可改编自页面 Batch files - Escape CharactersRob van der Woude's Scripting Pages site .

长见识

Windows (and DOS) batch file character escaping is complicated :

Much like the universe, if anyone ever does fully come to understand Batch then the language will instantly be replaced by an infinitely weirder and more complex version of itself. This has obviously happened at least once before ;)

百分号 %

%可以转义为 %% – “在双引号字符串中可能并不总是需要 [被转义],只需尝试”

通常,使用插入符号 ^

这些字符“可能并不总是需要在双引号字符串中[进行转义],但不会造成伤害”:

  • ^
  • &
  • <
  • >
  • |

示例: echo a ^> b打印 a > b在屏幕上

' “仅在 FOR /F “主题”(即括号之间)中需要[转义],除非 backq 被使用”

` “仅在 FOR /F “主题”(即括号之间)中需要[转义],如果 backq 被使用”

这些字符“仅在 FOR /F “主题”(即括号之间)中需要[转义],甚至在双引号字符串中”:

  • ,
  • ;
  • =
  • (
  • )

使用延迟变量扩展时的双重转义感叹号

!必须转义 ^^!当延迟变量扩展处于事件状态时。

find 中的双引号搜索模式

"""

findstr 中使用反斜杠正则表达式模式

  • \
  • [
  • ]
  • "
  • .
  • *
  • ?

还有

Rob 进一步评论了这个问题(通过与我自己的电子邮件通信):

As for the answer, I'm afraid the chaos is even worse than the original poster realizes: requirements for escaping parentheses also depend on the string being inside a code block or not!

I guess an automated tool could just insert a caret before every character, then doubling all percent signs - and it would still fail if the string is doublequoted!

此外,各个程序负责解析它们的命令行参数,因此需要进行一些转义,例如对于 sedssed , 可能是由于批处理脚本中调用了特定的程序。

关于windows - 批量字符转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828751/

相关文章:

windows - 我是否将图标设置为使用 mklink cmd 命令的快捷方式

audio - 如何使用 ffmpeg 叠加/缩混两个音频文件

c# - 如何获取 Windows 服务登录用户的安全 token ?

windows - 如何在 Windows 上设置 gl3w?

batch-file - 通过拖放到批处理文件上运行命令

powershell - 将值从 cmd 传递到 npm 脚本

batch-file - 一行获取 Reg 查询的错误代码

eclipse - 如何在多台计算机上使用相同的插件和设置自动安装 Eclipse?

php - PHP 中的多线程

batch-file - 批处理命令和错误处理