快速猜测:
start "" sqlplus....
现在好了!有一个有趣的练习。
start "" sqlplus %DBUName%/%DBPwd%@%GISName% "@%~dp0SQL\SetUp\SETUP.sql" "%~dp0Config\SETUP.ok"
是start 的“引用参数”问题的标准解决方案。第一个"quoted string" 被指定为窗口的标题——这就是正常的抱怨。插入明显冗余的空字符串不会为窗口提供标题 - 它实际上是“这是我想要的窗口标题”的最简单形式 - 并且更容易键入。
我没有时间以任何方式对此进行测试,这就是我建议它作为猜测的原因。我尝试了一个名为sqlplus.bat 的批处理文件,它只显示了它的参数:
@echo off
setlocal
echo @~nx0 received ==^>%*^<==
pause
exit
但这似乎按预期传达了所有论点。
所以由于sqlplus 是一个可执行文件,我想我会安装它并尝试。呃 - 至少 33Mb,以及所有合法的登录和密码以及另一个我只会使用一次的帐户......不。
所以我在 Delphi 中构建了自己的 sqlplus.exe - 只需评估命令行参数。三十秒的工作。
问题是我无法使用声称按位置返回参数的函数让可执行文件在参数中显示引号。所以那我不得不调查。我发现了一个函数来返回提供的整个命令行 - 并且有引号,大如生命。
原来有一个 Delphi 错误,其中paramstr(x) 从为参数 x 返回的值中删除了封闭引号。向 EMBT 报告。
并重新测试,使用我构建的可执行文件 - 显示命令行本身(cmdline,如果你有兴趣) - 好吧,在这个问题的上下文中是个坏消息 - 我的测试表明
start sqlplus %DBUName%/%DBPwd%@%GISName% "@%~dp0SQL\SetUp\SETUP.sql" "%~dp0Config\SETUP.ok"
和
start "" sqlplus %DBUName%/%DBPwd%@%GISName% "@%~dp0SQL\SetUp\SETUP.sql" "%~dp0Config\SETUP.ok"
两者都提供相同的命令行 - 包括所写的引号。
所以 - 似乎问题出在sqlplus 或sqlplus 执行的指令上。引用的字符串似乎可以很好地传递给可执行文件。
假设OP执行
sqlplus %DBUName%/%DBPwd%@%GISName% "@%~dp0SQL\SetUp\SETUP.sql" "%~dp0Config\SETUP.ok"
(替换适当的参数后) - 这是否按预期显示引号? (这个问题真的是一个SQLPLUS 的问题和这个标签的题外话。我不知道sqlplus。
附加(嗯,确实是评论,但它不太适合评论系统...)我相信我们遇到了语言或术语问题...
会
sqlplus %DBUName%/%DBPwd%@%GISName% "@%~dp0SQL\SetUp\SETUP.sql" "%~dp0Config\SETUP.ok"
当使用该语法(但将%dbuName% 等替换为实际名称)直接从命令提示符执行时是否正确运行?