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



大家好,我有下面的批处理变量%~4,它是一个用户用户名。目前,我遇到了一个问题,因为我有一个用户名为Scott123的用户注册!这个未正确读取。我试着像这个"%~4"一样逃离它,它适用于大多数角色,但不适用于!性格有人想出解决这个问题的办法吗?

您可以尝试set username="%~4:!=^^!"用转义感叹号替换任何!(可能需要先将%~4分配给另一个变量(。

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

ss64.com可能会帮助您全面了解所有特殊情况:https://ss64.com/nt/syntax-esc.html

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

如果批处理文件中没有任何工作或需要付出很大努力,则需要事先在其他地方转义这些字符。更好的是,完全禁止将它们作为用户名输入。然后,逃离的必要性就解除了。

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

最新更新