我从我的java程序调用批处理文件,结果执行一些.sql文件。 批处理脚本如下:
set part1= CREATE OR REPLACE DIRECTORY REPORT AS '
set total=%part1%%4';
echo %total% > DIR_REPORT.sql
echo exit; >>DIR_REPORT.sql
sqlplus %1/%2@%3 @./DIR_REPORT.sql
sqlplus %1/%2@%3 @./PACKAGE_SCRIPTv2.sql
我的java代码是:
Runtime run = Runtime.getRuntime();
System.out.println("Start Running the batch file");
Process p = run.exec(new String[]{"cmd.exe","/c", "start", "C:/Users/sony/Documents/NetBeansProjects/CodeReview/src/codereview/install.bat",i,j,m,l});
System.out.println("Completed");
它给出错误:
SP2-0310: unable to open file
正在执行使用批处理(DIR_REPORT)生成的第一个文件但是我的PACKAGE_SCRIPTv2.sql没有被执行但是引发了错误,请帮我做什么。
虽然从cmd手动运行批处理文件时一切正常......
答案 0 :(得分:0)
第一个脚本正在当前工作目录中创建和执行,因此它将始终存在(假设您有权在那里创建)。第二个预计也将在当前的工作目录中。问题是,当前的工作目录是什么?
看起来你期望它是C:/Users/sony/Documents/NetBeansProjects/CodeReview/src/codereview/
,如果你在那里手动运行.bat
它就可以了(从你所说的);因此,当你从Java调用它时,它必须在其他地方。那将是您的JVM启动时的工作目录,或者您的主目录,我认为 - 不太确定。
您需要指定正确的目录,或者硬编码到脚本中,或者作为另一个参数传递。然后,您可能希望在脚本中cd
,以便在同一个已知位置创建DIR_REPORT.sql
;否则你可以使用它创建PACKAGE_SCRIPTv2.sql
的完整路径。
答案 1 :(得分:0)
是的,问题是语句中定义的路径包含所有文件,但执行时脚本只执行到:
“C:/用户/索尼/文档/的NetBeansProjects /代码审查”
这是cmd中显示的内容,因此我将文件放入此目录并开始工作......不知道原因。
提示:当您发现此类问题时,请正确查看错误消息,因为它会告诉您脚本失败时的位置,因此只需将文件放在该位置即可...
享受\ m /