Bat文件中有日志文件但不能执行,java程序日志文件不生成



我创建了一个bat文件,我试图复制文件夹并将其日志生成到myLog.txt文件中现在我试图通过java程序运行bat文件它正在执行,但它无法生成日志文件请帮助我

public static void allBatch()
{       
try {
// Process p =  Runtime.getRuntime().exec("cmd /c stopTomact.bat", null, new File("C:\Users\Ajay\Documents"));
Process process =Runtime.getRuntime().exec("cmd /C start C:\Users\Ajay\Documents\batchFile.bat");
System.out.println("Stopped"); 
} catch (IOException ex) {
ex.printStackTrace();
}
}

@echo off
@echo off
call :main >myLog.txt 2>&1
:main
if exist "C:UsersAjayDocumentsold TomcatController*.*" (
xcopy /e "C:UsersAjayDocumentsold TomcatController*.*" "C:UsersAjayDocumentsnewTomcatController*" /y
echo %date%-----Copy Successful------%time%
echo  ---------------------------------------------------
net stop Tomcat8
sc query Tomcat8
echo %date%-----Stop Successful------%time%
rem  start notepad "C:UsersAjayDocuments"  
)else echo %date%------- sorry Failed TO Copy -----%time%

timeout 5 > nul
exit

调用Runtime.exec()方法。该方法返回一个Process实例,在它的文档中可以读到

默认情况下,创建的进程没有自己的终端或控制台。它的所有标准I/O(即stdin, stdout, stderr)操作将被重定向到父进程,在那里它们可以通过使用getOutputStream(), getInputStream()和getErrorStream()方法获得的流来访问。父流程使用这些流向流程提供输入并从流程获取输出。由于一些本地平台仅为标准输入和输出流提供有限的缓冲区大小,如果不能及时写入输入流或读取进程的输出流,可能会导致进程阻塞,甚至死锁。https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Process.html

所以很可能你的进程是由操作系统启动的,但由于I/O限制而被阻塞。通过读取STDOUT和STDERR流来解决这个问题,直到进程结束。在https://www.baeldung.com/run-shell-command-in-java

可以看到一个好的编程模型。

最新更新