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




Как вы это называете с Явы?
Что именно происходит, когда вы это делаете?
Почему вы вызываете командный файл вместо того, чтобы делать то же самое в 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")
Нет причин для голосов против. +1