我从我的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手动运行批处理文件时,一切工作正常...
发布于 2013-12-04 22:07:12
第一个脚本是在当前工作目录中创建和执行的,因此它将始终存在(假设您有在那里创建的权限)。第二个文件预计也在当前工作目录中。那么,问题是,当前的工作目录是什么?
看起来您期望它是C:/Users/sony/Documents/NetBeansProjects/CodeReview/src/codereview/,如果您在那里手动运行.bat,它可以正常工作(根据您所说的);因此,当您从Java中调用它时,它一定在其他地方。这要么是你的JVM启动时的工作目录,要么是你的主目录,我想--不是很确定。
您需要指定正确的目录,要么硬编码到脚本中,要么作为另一个参数传递。然后,您可能希望在脚本中对其执行cd操作,以便在相同的已知位置创建DIR_REPORT.sql;否则,您可以使用它创建PACKAGE_SCRIPTv2.sql的完整路径。
发布于 2013-12-05 19:58:58
是的,问题是在语句中定义的路径包含所有文件,但在执行时,脚本只运行到:
"C:/Users/sony/Documents/NetBeansProjects/CodeReview“
这就是cmd中显示的内容,所以我将文件放到了这个目录中,它开始工作了……我不知道原因。
提示:当你发现这样的问题时,请正确地查看错误消息,因为它会告诉你脚本在失败时正在查找的位置,所以只需将文件放在该位置就可以工作了……
享受\m/
https://stackoverflow.com/questions/20375222
复制相似问题