批处理脚本:关闭空间和用户输入的某些字符

时间:2013-08-14 21:21:43

标签: batch-file

在我创建的批处理脚本中,某些时候它会查看用户输入并根据IF语句执行相应的功能。如果用户输入不匹配,则会再次请求输入。我遇到的问题是,如果用户输入空格,<,>,等等,程序会突然终止。我已经尝试添加if语句来捕获它们并添加@ECHO ON以查看交互但它似乎就像用户按下回车一样死掉。关于如何避免这种想法的任何想法?

2 个答案:

答案 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