问题描述
我正在尝试从Python脚本创建一个批处理文件,该脚本执行Plink以通过SSH将SQL查询发送到外部数据库。该脚本必须激活带有多个命令行的批处理文件才能发送到服务器。 在互联网上研究发现,一种类似于下面的代码的解决方案应该可以解决问题。
(
echo command 1
echo command 2
...
) | plink.exe user@hostname -i sshkey.ppk
输入我的命令将产生以下结果:
(
echo MysqL -u admin -pPassword Database
echo INSERT INTO Table VALUES(DEFAULT,(SELECT ID FROM Another_Table WHERE Another_ID = 'foo'),'bar','foobar','date',1);
) | plink.exe user@hostname -i sshkey.ppk
我遇到的问题是,我收到以下错误:目前无法对'bar'进行语法处理。 (对不起,如果此处的翻译不正确,英语不是我的母语)。 我检查了是否必须转义某些特殊字符,但未找到任何确定性的答案。请注意,第一个命令是正确的,并且可以按预期工作。仅第二条命令似乎有故障。有人愿意为我提供解决方案吗?
解决方法
因此,这里的答案是,您不仅需要转义右括号TWICE,而且必须转义三个“ ^”字符。这是因为括号内的命令被解析了两次,第二个“ ^”需要转义才能进行第一次解析,因此需要第三个字符。
有关详细信息,请参见此处:Escaping parentheses within parentheses for batch file
代码因此如下所示:
(
echo mysql -u admin -pPassword Database
echo INSERT INTO Table VALUES(DEFAULT,(SELECT ID FROM Another_Table WHERE Another_ID = 'foo'^^^),'bar','foobar','date',1^^^);
) | plink.exe user@hostname -i sshkey.ppk