在我创建的批处理脚本中,某些时候它会查看用户输入并根据IF语句执行相应的功能。如果用户输入不匹配,则会再次请求输入。我遇到的问题是,如果用户输入空格,<,>,等等,程序会突然终止。我已经尝试添加if语句来捕获它们并添加@ECHO ON以查看交互但它似乎就像用户按下回车一样死掉。关于如何避免这种想法的任何想法?
答案 0 :(得分:0)
CMD有许多具有特殊含义的字符,通常被称为“毒性字符”,因为如果它们暴露给批处理解析器,它们可能会导致许多不必要的影响。示例包括&
|
>
<
- 还有更多内容。
通常,如果字符引用为">"
,或者像^>
那样进行转义,则不会导致问题。但是你无法控制用户输入的内容。使用正常扩展时,某些值不安全。例如,如果用户输入This & that "& the other thing"
,则无法在值周围添加引号,以便引用&
。
幸运的是,延迟扩展提供了一个简单的解决方案。您可以使用%VAR%
,而不是使用!VAR!
扩展变量。在解析器完成查看所有字符后,变量被扩展,因此毒性字符不会导致任何问题。必须首先使用setlocal enableDelayedExpansion
这是一个简单的演示,无论出现什么毒性字符,都可以成功ECHO用户键入的任何值。您可以轻松地将代码调整为IF语句。
@echo off
setlocal enableDelayedExpansion
set /p "var=Enter a string: "
echo You entered: !var!
答案 1 :(得分:0)
双引号可以防止空格和大多数毒药字符。 IF比较也需要它们。
set /p "variable=Enter your input: "
echo "%variable%"
if "%variable%"=="string" execute program