Пакет не работает при вызове из Java-программы

Я написал командный файл, который читается в текстовом файле, который содержит список имен файлов, а затем удаляю и переименовываю их один за другим. Я сделал это с помощью цикла 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-программы?

Нет причин для голосов против. +1

cdeszaq 16.01.2009 20:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 189
5

Ответы 5

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

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

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

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

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

set BAT_HOME=%~dp0
echo %BAT_HOME%

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

Вам следует использовать:

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

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

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

p.waitFor ();

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

...exec("cmd /c update.bat")

Другие вопросы по теме