对批量变量中的所有字符进行转义处理

问题描述 投票:1回答:1

嘿,大家好,我有以下批次变量 %~4 这是一个用户的用户名。目前,我遇到了一个问题,因为我有一个用户名为Scott123的用户注册了!!!!!!!!!!!!!!不能正确读取。我试着把它转义成这样 "%~4" 而这对大多数字符都有效,但对 !"字符却无效。有谁想出了解决这个问题的办法吗?

escaping batch-processing
1个回答
0
投票

你可以试试 set username="%~4:!=^^!" 替换任何 ! 用一个转义的感叹号(也许你需要把它赋给 %~4 到另一个变量)。)

您可能需要考虑将 < > % | = , : & CON LPT1 和其他批处理文件中的特殊关键字符号,以防止 "批处理文件注入";) 如果我没有记错的话,只有 ! 需要一个双小括号作为转义符号(它通常用于表示延迟扩展变量)。百分号也很特殊,它需要另一个百分号来转义。%%. 如果你也需要逃离caret,我想,事情会变得很棘手。

ss64.com可能会帮助你获得所有特殊情况的完整概述。https: /ss64.comntsyntax-esc.html。

变量中的字符串替换在帮助中描述了 set. 执行set /? 在命令行窗口中读取它。或者也可以试试ss64,可能是更详尽的读取方式(https:/ss64.comntset.html).

如果在批处理文件中没有任何作用或者太费劲,你需要事先在其他地方转义这些字符。最好是完全禁止它们作为用户名输入。那么转义的需求就被解除了。


0
投票

我让它工作的方法之一是注释SETLOCAL ENABLEDELAYEDEXPANSION,并在变量周围加上""。

© www.soinside.com 2019 - 2024. All rights reserved.