如果从Java程序调用,则批处理不起作用

时间:2009-01-16 15:39:47

标签: java batch-file

我编写了一个批处理文件,该文件读入包含文件名列表的文本文件,然后逐个删除并重命名。我是通过使用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 个答案:

答案 0 :(得分:1)

你是如何用Java调用它的?

当你这么做时到底发生了什么?

当你从Java调用它时,为什么要调用批处理文件而不是用Java做同样的事情呢?

答案 1 :(得分:1)

您应该使用:

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

相反。

Here是关于如何从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();
    }
}

由于某些原因超出了我的理解范围,如果我没有读取输入,则不会执行该过程,这就是上面 for 循环的原因。

这是我的测试:

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

我希望这会有所帮助。

答案 2 :(得分:0)

也许当前目录不是您所想的,因此找不到ListFile.txt。

尝试类似:

set BAT_HOME=%~dp0
echo %BAT_HOME%

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

答案 3 :(得分:0)

进程p = Runtime.getRuntime()。exec(“update.bat”);

p.waitFor();

答案 4 :(得分:0)

你确定你被允许执行BAT脚本吗?我不认为Windows将它们视为与Unix一样的第一类可执行文件。你可能不得不做一些奇怪的事情:

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