是否可以将插入符号 (^) 从引用变量中转义?

是否可以将插入符号 (^) 从引用变量中转义?

我设置了一个批处理文件,该文件使用传递到命令文件中的 SQL 命令。但是,当我调用此变量时,该行没有显示。我收到“无法识别 SQL 命令”错误。

在我的文件中我做了这样的事情:

ECHO OFF
set vSQL=%~2

echo %vSQL%

我传递给文件的 sql 变量包含小于操作:select * from sometable where c3 < 999999999

我尝试将添加^到此:...c3 ^< 999999999,但仍然不起作用。我得到了同样的错误。还有其他方法可以<在批处理文件中使用吗?

是的,我确信是文件的那部分导致了问题。我在 sqldeveloper 中运行了整个 SQL 操作,它运行正常。

答案1

批处理解析器使用以下内容来分隔参数:<space> <tab> ; , = <0xFF>最后一个字符是一个不间断空格。

在命令行中无法转义参数分隔符。在参数值中包含分隔符的唯一方法是将整个参数括在双引号中。

因此,您可以使用以下方式调用脚本:yourScript.bat "select * from sometable where c3 < 999999999"。由于<现在已引用,因此您不必担心对其进行转义。

引号被视为值的一部分。使用修饰符~将从%~2参数值中删除括起来的引号。但现在您确实需要担心重新引用或转义<。最简单的方法是将 添加到整个赋值表达式的两边:set "vSQL=%~2"。当以这种方式完成时,引号会保护<,但它们不包含在值中。

当需要使用变量时,您又需要担心字符<。在这种情况下,最简单的方法是启用并使用延迟扩展。

setlocal enableDelayedExpansion
echo !vSQL!

相关内容