为什么我的代码输入到批处理文件不起作用



我正在尝试写入一个加载的批处理文件进程,但我不知道如何执行等效的返回。

Java代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Scanner;
public class Start {
    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec("C:\Users\Max\Desktop\test.bat");// Runtime.getRuntime().exec("keytool -genkey -alias " + name.replace(" ", "").trim() + "  -keystore key");
            DataInputStream in = new DataInputStream(p.getInputStream());
            Scanner scanner = new Scanner(in);
            // System.out.println(scanner.nextLine());
            DataOutputStream out = new DataOutputStream(p.getOutputStream());
            out.write("testnn".getBytes());
            out.flush();
            out.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

批次代码:

@echo off
set /p delBuild=lozors?: 
echo test >> test.txt

运行时,它应该输出到我桌面上的文本文件。。。但它似乎不接受输入?我试过使用\n和\n,也试过只写和刷新,但都不起作用。想法?

首先,我不是一个批处理开发人员,我已经很久没有做过任何(认真的)批处理编码了,所以我没有认出set /p命令。。。

代码不起作用的原因可能有很多,但最突出的是批处理文件中的这个命令。。。

echo test >> test.txt

这是在"呼应"testtest.txt。它与您键入的内容不一致。

要做到这一点,您需要回显环境变量delBuild,您的输入将被分配给它

echo %delBuild% >> test.txt

还要注意,一旦发送n,文本很可能会被提交到环境变量,批处理文件将继续运行。

这是我在测试中使用的批处理文件。。。

@echo off
set /p delBuild=lozors?: 
echo %delBuild% >> test.txt

这是我用来测试它的代码。。。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestProcessBuilder02 {
    public static void main(String[] args) {
        try {
            ProcessBuilder pb = new ProcessBuilder("test.bat");
            pb.redirectError();
            Process p = pb.start();
            OutputStream os = null;
            try {
                os = p.getOutputStream();
                os.write("I am invincible".getBytes());
            } finally {
                try {
                    os.close();
                } catch (Exception e) {
                }
            }
            InputStream is = null;
            try {
                is = p.getInputStream();
                int in = -1;
                while ((in = is.read()) != -1) {
                    System.out.print((char)in);
                }
            } finally {
                try {
                    is.close();
                } catch (Exception e) {
                }
            }
            int exit = p.waitFor();
            System.out.println("Exited with " + exit);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
    }
}

注意-我使用了ProcessBuilder,因为它通常比单独使用Runtime#exec更容易、更宽容-IMHO

我实际上只是在使用了答案:与来自java的windows批处理文件(或外部程序)通信,只是我没有使用缓冲区写入程序,因为它似乎阻止了它的工作。

相关内容

  • 没有找到相关文章