Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果从Java程序调用,则批处理不起作用_Java_Batch File - Fatal编程技术网

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

如果从Java程序调用,则批处理不起作用,java,batch-file,Java,Batch File,我编写了一个批处理文件,读取包含文件名列表的文本文件,然后逐个删除和重命名它们。我通过使用for循环实现了这一点,双击它可以完美地工作 但是当我试图从Java程序调用这个批处理时。它不再适用于此部件: for /f %%a in (ListFile.txt) do ( DEL %%a REN %%a_NEW %%~nxa ) 对于(ListFile.txt)中的/f%%a,请执行以下操作( 德尔%%a REN%%a_NEW%%~nxa ) 如果我只指定某个文件名。它通过从Ja

我编写了一个批处理文件,读取包含文件名列表的文本文件,然后逐个删除和重命名它们。我通过使用for循环实现了这一点,双击它可以完美地工作

但是当我试图从Java程序调用这个批处理时。它不再适用于此部件:

for /f %%a in (ListFile.txt) do ( DEL %%a REN %%a_NEW %%~nxa ) 对于(ListFile.txt)中的/f%%a,请执行以下操作( 德尔%%a REN%%a_NEW%%~nxa ) 如果我只指定某个文件名。它通过从Java调用来工作。说

DEL tag.jar REN tag.jar_NEW tag.jar DEL tag.jar REN tag.jar_NEW tag.jar “call”命令也会发生同样的情况。如果从Java程序调用,它将不起作用,这使我不得不使用“start”命令


有人能告诉我为什么会这样吗?如果从Java程序调用,如何使它也工作?

您如何从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();
    }
}
由于某种超出我理解的原因,如果我不读取输入,进程就不会执行,这就是上面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

我希望这能有所帮助。

processp=Runtime.getRuntime().exec(“update.bat”)


p、 waitFor()

您确定可以执行BAT脚本吗?我认为Windows不像Unix那样将它们视为一流的可执行文件。你可能需要做一些奇怪的事情,比如:

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

没有理由投反对票+1.