пакет не работает, если вызов из программы Java - PullRequest
0 голосов
/ 16 января 2009

Я написал командный файл, который читает текстовый файл, содержащий список имен файлов, а затем удаляю и переименовываю их один за другим. Я сделал это с помощью цикла for, и он отлично работает, дважды щелкнув по нему.

Но когда я пытался вызвать этот пакет из Java-программы. Эта часть больше не работает:

for /f %%a in (ListFile.txt) do (
    DEL %%a
    REN %%a_NEW %%~nxa
  )

Если я только укажу определенное имя файла. Это работает, звоня из Java. Скажем,

DEL tag.jar
REN tag.jar_NEW tag.jar

То же самое происходит с командой 'call'. Это не работает при вызове из Java-программы, что заставляет меня использовать команду «start».

Может кто-нибудь сказать мне, почему это так? Как я могу сделать так, чтобы он также работал при вызове из Java-программы?

Ответы [ 5 ]

1 голос
/ 16 января 2009

Вы должны использовать:

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

Вместо.

Здесь - фрагмент кода запуска программ из Java.

И ниже, как я это проверяю.

import java.io.*;
public class RunIt {
    public static void main( String [] args ) throws Throwable   { 
        Process p = Runtime.getRuntime().exec( "cmd /c update.bat");
        InputStream i = p.getInputStream();
        for(  int c = 0 ; ( c =  i.read() ) > -1  ; ) {}
        i.close();
    }
}

По некоторым причинам, которые выходят за рамки моего понимания, если я не читаю ввод, процесс не выполняется, это причина цикла для выше.

Вот мой тест:

C:\oreyes\samples\java\readinput>type update.bat
echo "x" >> x.txt

C:\oreyes\samples\java\readinput>dir x.txt
 Directorio de C:\oreyes\samples\java\readinput

 No se encuentra el archivo // That is file not found

C:\oreyes\samples\java\readinput>javac RunIt.java

C:\oreyes\samples\java\readinput>java RunIt

C:\oreyes\samples\java\readinput>dir x.txt

01/16/2009  11:14 AM                 6 x.txt // file created hence update.bat executed
               1 archivos              6 bytes

Надеюсь, это поможет.

1 голос
/ 16 января 2009

Как вы называете это с Java?

Что именно происходит, когда вы делаете?

Почему вы вызываете командный файл вместо того, чтобы делать то же самое в Java, когда вы все равно вызываете его из Java?

0 голосов
/ 16 января 2009

Вы уверены, что можете запускать BAT-скрипт? Я не думаю, что Windows воспринимает их как первоклассные исполняемые файлы так же, как Unix. Возможно, вам придется сделать что-то странное, например:

...exec("cmd /c update.bat")
0 голосов
/ 16 января 2009

Процесс p = Runtime.getRuntime (). Exec ("update.bat");

p.waitFor ();

0 голосов
/ 16 января 2009

Возможно, текущий каталог не тот, что вы думаете, поэтому ListFile.txt не найден.

Попробуйте что-то вроде:

set BAT_HOME=%~dp0
echo %BAT_HOME%

for /f %%a in (%BAT_HOME%\ListFile.txt) do (
    DEL %%a
    REN %%a_NEW %%~nxa
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...