Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用ProcessBuilder将字符串写入cmd提示符?_Java - Fatal编程技术网

如何在Java中使用ProcessBuilder将字符串写入cmd提示符?

如何在Java中使用ProcessBuilder将字符串写入cmd提示符?,java,Java,我有一个批处理(.bat)程序,要求用户提供主机名和密码。(两个字段)我使用一个单独的Java应用程序来收集以自动化此任务,因此我需要它在脚本中同时输入多个主机名。然而,我很难使用ProcessBuilder实现这个目标。 请查看以下代码: 我这里的代码只将输入和输出重定向到java进程。然而,我只想写信给cmd。如果有什么办法,请告诉我。谢谢 import java.io.IOException; 公共班机{ 公共静态void main(字符串[]args)抛出InterruptedExcep

我有一个批处理(.bat)程序,要求用户提供主机名和密码。(两个字段)我使用一个单独的Java应用程序来收集以自动化此任务,因此我需要它在脚本中同时输入多个主机名。然而,我很难使用ProcessBuilder实现这个目标。 请查看以下代码:

我这里的代码只将输入和输出重定向到java进程。然而,我只想写信给cmd。如果有什么办法,请告诉我。谢谢

import java.io.IOException;
公共班机{
公共静态void main(字符串[]args)抛出InterruptedException,
IOException{
ProcessBuilder pb=new ProcessBuilder(“cmd”,“/k d:&&cd数据\\虚拟化脚本\\EMC ESXi抓取和脚本运行”);
//继承IO
pb.inheritIO();
Process进程=pb.start();
process.waitFor();
}
}

@Tharriott,根据我们的讨论,首先您必须像这样修改批处理脚本。我提供以下代码

@ECHO OFF 
set host=%1 
set password=%2

echo Host Name : %host%
echo Password : %password%

"D:\UPSDATA\Virtualization Scripts\EMC ESXi Grab\EMC-ESXi-GRAB-1.3.10\emcgrab.exe" -host %host% -vmsupport -user root -password %password% -case 00000000 -legal -customer UPS -party 00000 -contact user -phone NA -email NA 

exit
假设批处理脚本的名称是emc grab.bat

现在您必须像这样运行上面的批处理文件

:/emc-grab.bat

一个例子是这样的

D:/test/emc-grab.bat abcd.dellemc.com pa$$word99

现在下一步是什么?

在java gui程序中,捕获主机名和密码,然后在processbuilder类中,传递完整的命令以及文件名、主机名和密码

我在下面提供代码片段

String hostNameAndPassword = "captured Host Name"+" "+"captured password";
ProcessBuilder pb = new ProcessBuilder("cmd" ,"some path:/emc-grab.bat "+hostNameAndPassword);

试试看,它会解决您的问题。

使用扫描仪获取主机名和密码,并将主机名和密码作为命令行传递给脚本。所有这些都可以通过在上述程序中进行小调整来实现。还需要修改bash脚本以接受主机名和密码作为命令行。@Sambit Scanenr在这种情况下不起作用,因为我想让java应用程序自动执行让用户重复键入响应的任务。您提到过“这要求用户提供主机名和密码”,如何获取这两个字段以执行bash脚本?@Sambit首先,我犯了一个错误,我本想说“批处理脚本”。此外,我有一个GUI设置,因此长期目标是让用户为多台服务器提供主机名和密码,并让java应用程序一次运行一台。这仍然会造成混乱。你能告诉我们你的实际需求吗?这样我们就可以帮助你了。不过,当我运行你的代码时,密码出现了一个错误。密码很短,但它传递的密码比我输入的密码长得多<代码>命令行选项:-主机servername.example.com-vmsupport-user root-password********************************************************************************************************************************************************************************************************************************************这是代码:
String hostName=“servername.example.com”;字符串password=“password1234”;ProcessBuilder pb=new ProcessBuilder(“cmd”、“/k d:&&cd数据\\虚拟化脚本\\EMC ESXi-Grab\\EMC-ESXi-Grab-1.3.10&&ESXRun.bat”+主机名+“”+密码);pb.inheritIO();Process进程=pb.start()在执行java程序之前,只需通过将主机名和密码作为命令行传递来运行批处理,并查看它们是如何打印和执行的。如果这是成功的,那么您可以用Java实现。总是将问题分解成小块,以便更容易解决。是的,当我通过cmd执行时,仍然会出现相同的错误。我会试试看我是否能解决这个问题。谢谢你,它工作正常,你给我的批处理脚本很好。