嘿,大家好,我有以下批次变量 %~4
这是一个用户的用户名。目前,我遇到了一个问题,因为我有一个用户名为Scott123的用户注册了!!!!!!!!!!!!!!不能正确读取。我试着把它转义成这样 "%~4"
而这对大多数字符都有效,但对 !"字符却无效。有谁想出了解决这个问题的办法吗?
你可以试试 set username="%~4:!=^^!"
替换任何 !
用一个转义的感叹号(也许你需要把它赋给 %~4
到另一个变量)。)
您可能需要考虑将 < > % | = , : & CON LPT1
和其他批处理文件中的特殊关键字符号,以防止 "批处理文件注入";) 如果我没有记错的话,只有 !
需要一个双小括号作为转义符号(它通常用于表示延迟扩展变量)。百分号也很特殊,它需要另一个百分号来转义。%%
. 如果你也需要逃离caret,我想,事情会变得很棘手。
ss64.com可能会帮助你获得所有特殊情况的完整概述。https: /ss64.comntsyntax-esc.html。
变量中的字符串替换在帮助中描述了 set
. 执行set /?
在命令行窗口中读取它。或者也可以试试ss64,可能是更详尽的读取方式(https:/ss64.comntset.html).
如果在批处理文件中没有任何作用或者太费劲,你需要事先在其他地方转义这些字符。最好是完全禁止它们作为用户名输入。那么转义的需求就被解除了。
我让它工作的方法之一是注释SETLOCAL ENABLEDELAYEDEXPANSION,并在变量周围加上""。