我正在执行一堆SQL脚本,并尝试在执行每个文件后读取输出日志文件,以查找错误。

这是我执行脚本的方式。

String strCommand = "sqlcmd -S SERVERNAME -d DBNAME -U USERNAME -P PASSWORD -r0 -i \"SCRIPT.sql\" 2> \"OUTPUT.LOG\" 1> NULL";
Process process = Runtime.getRuntime().exec(strCommand);
process.waitFor();


我已将标准输出重定向到NULL,并将错误重定向到日志文件。在执行完以上语句之后,我立即尝试使用File ReaderBufferedReader读取OUTPUT.LOG文件的内容。尝试打开OUTPUT.LOG文件时引发异常。


  (该系统找不到指定的文件)


我检查了应该保存文件的路径,不用说,它不存在。当我尝试通过命令提示符手动执行命令时,它可以正常工作,并且按预期将日志文件写入错误。我究竟做错了什么?

最佳答案

如果您是从命令外壳程序运行的,则重定向(2>等)将起作用,但如果您是直接从Java这样运行的,则无法进行重定向。

尝试以下操作(对于Windows):

String strCommand = "cmd /c sqlcmd -S SERVERNAME -d DBNAME -U USERNAME -P PASSWORD -r0 -i \"SCRIPT.sql\" 2> \"OUTPUT.LOG\" 1> NULL";
Process process = Runtime.getRuntime().exec(strCommand);
process.waitFor();


注意添加了cmd /c,它将在命令外壳中运行字符串。

09-10 23:03
查看更多