2009-06-15 6 views
4

Я выполняю командный файл с использованием Java-кода. Код приведен ниже:Runtime.getRuntime(). Exec(), скрыть экран консоли

Process proc = null; 

proc = Runtime.getRuntime().exec("cmd /c start somebat.bat"); 

При этом открывается экран обычной командной строки. Теперь я хочу подавить/скрыть окно командной строки (черный). Я где-то нашел, что, если я удалю атрибут start из этой команды, он не появляется, но при удалении из команды команда не выполняется и исключения не отображаются.

Может ли любое тело сказать мне, как подавить это окно?

+0

Добавить выход в конец сценария партии. – 2013-07-07 20:08:59

ответ

-2

Я не очень хорошо знаю окна, но предлагаю вам опустить бит «cmd». cmd.exe - это терминал Windows. Просто догадка. Посмотрите другие методы exec(), есть один, который запускает исполняемый файл команды и аргументы. В UNIX, по крайней мере, вы обычно не можете делать что-либо, что оболочка не поддерживает (например, конвейерный вывод в файл), поскольку это функции оболочки и не выполняются вызываемой программой. Может быть, почему вы обнаруживаете, что вы удаляете префикс cmd, некоторые вещи не работают.

попробовать просто:

Process proc = Runtime.getRuntime().exec("somebat.bat");

+1

Привет, Данная опция не работает. Файл bat не выполняется. – 2009-06-15 10:31:21

+0

Вы пытались указать полный путь? – gubby

+0

Да, я попытался, но пакетный файл не был выполнен. – 2009-06-16 11:56:43

1

Добавить /Q

Runtime.getRuntime().exec("cmd /c /Q start somebat.bat"); 
+0

Hi jitter, /Q опция не работает. Команда не выполняется, когда я добавляю/Q :-( – 2009-06-15 10:30:17

0

Вы пробовали

start /min "title" "c:\path\batchfile.bat" 

Это позволит запустить пакетный файл без окна. Он все равно будет отображаться на панели задач, однако (поскольку он сведен к минимуму)

+0

Hi Brian, Мне нужно полностью скрыть окно приглашения. Эта опция просто скроет окно. – 2009-06-15 10:32:12

5

Вы пробовали вариант B «начать»?

proc = Runtime.getRuntime().exec("cmd /c start /B somebat.bat"); 

Edit:
Ok, Аниш, что это смешно, что ваш код не выполняется.
я создал модульного теста:

Process proc = null; 
    try 
    { 
     proc = Runtime.getRuntime().exec("cmd /c start /B D:\\temp\\_test\\somebat.bat"); 
     proc = Runtime.getRuntime().exec("cmd /c call D:\\temp\\_test\\somebat.bat"); 
     proc = Runtime.getRuntime().exec("D:\\temp\\_test\\somebat.bat"); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Мой файл somebat.bat выглядит следующим образом:

rem somebat.bat: 
d: 
cd D:\temp\_test 
copy somebat.bat somebat2.bat 

Все три версии в примерки блок выше работы в моем сценарии. Somebat.bat копируется в файл somebat2.bat без появления окна команд (что происходит, если я использую ваш вызов, указанный в вашем вопросе).

Edit 2: Следующий раунд ;-)
Аниш, вы можете показать нам, как ваш somebat.bat и ваш муравей файл выглядит?
Поскольку все три звонков ниже работы в моем сценарии:

тестовый код:

Process proc = null; 
proc = Runtime.getRuntime().exec("cmd /c start /B c:\\temp\\_test\\somebat.bat"); 
proc = Runtime.getRuntime().exec("cmd /c call c:\\temp\\_test\\somebat.bat"); 
proc = Runtime.getRuntime().exec("c:\\temp\\_test\\somebat.bat"); 

somebat.Летучая мышь:

cd\temp\_test 
ant mycopy 

build.xml:

<?xml version="1.0"?> 
<project name="testproj" default="mycopy" basedir="."> 
    <target name="mycopy"> 
     <copy file="myfile.txt" tofile="mycopy.txt" /> 
    </target> 
</project> 

myfile.txt: произвольный текстовый файл

+0

Hi John Nopes/B также не разрешает мою проблему. файл не выполняется. – 2009-06-15 11:20:45

+0

На самом деле в моем командном файле выполняется команда ant. Выполняется только с последующим вызовом. С другими параметрами она никогда не запускается. «cmd/c start D: \\ temp \\ _ test \\ somebat.bat " – 2009-06-16 14:05:32

+1

Если вы выполняете только команду ant, вы можете также рассмотреть возможность просто сделать это непосредственно из java: все задачи Ant могут быть доступны как классы и просто запускаться (с учетом правильной конфигурации), а сам Ant также можно вызвать из в Java (см., например: http://www.ibm.com/developerworks/websphere/library/techarticles/0502_gawor/0502 _gawor.html) –

0

Попробуйте это:.

Runtime.getRuntime() EXEC (ЦМД. exe /KC:/path/batchfile.bat);

2
Process proc = null; 
proc = Runtime.getRuntime().exec("cmd /c start C:\temp\somebat.bat"); 
+0

, пожалуйста, дайте ответ в соответствующем формате http://stackoverflow.com/editing-help#syntax-highlighting –

0

Вы можете использовать "запустить" вместо "начать".

Runtime.getRuntime().exec("cmd /c run somebat.bat");

Смежные вопросы