我设置了一个批处理文件,该文件使用传递到命令文件中的 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!