bat文件在直接运行和用java程序运行之后得到的结果不一样是什么原因?

@echo off
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component" "Based" "Servicing\Packages\|findstr /i /m "KB4013418" >nul 2>nul
if %errorlevel%==0 (echo 1111) eLse echo 2222
echo.
pause
直接运行出来的结果是1111(因为确实是有这个文件夹)


当用java程序去运行该脚本时得到的结果确是2222
package ats.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class batdemo {
public static void main(String[] args) {
Process p = null;
String cmd = "C:\\Users\\winho\\Desktop\\1.bat";
InputStream fis = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
// 执行命令
p = Runtime.getRuntime().exec("cmd.exe /C " + cmd);
// 取得命令结果的输出流
fis = p.getInputStream();
// 用一个读输出流类去读
isr = new InputStreamReader(fis);
// 用缓冲器读行
br = new BufferedReader(isr);
String line = br.readLine();
// String line = null;
// 直到读完为止
// while((line=br.readLine())!=null) {
// System.out.println(line);
// }
System.out.println(line);
// p.waitFor();
// int a = p.exitValue();
// System.out.println(a);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
isr.close();
fis.close();
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这样运行的结果就是2222,如果我使用while去一行一行的读br里面的值它会不停的去读程序始终在运行。所以就只读了一行我要的结果。但是这个结果与直接运行的结果不一样,直接运行返回的值才是正确的,而我需要用java去接收bat文件的这个返回值。求大神详解!!!!
...全文
165 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧