如果从Java程序调用,则批处理不起作用
我编写了一个批处理文件,读取包含文件名列表的文本文件,然后逐个删除和重命名它们。我通过使用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,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
有人能告诉我为什么会这样吗?如果从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.