从Java运行.bat文件有问题

时间:2014-10-14 15:42:39

标签: java windows batch-file

@echo off
if "%1" == "" (
    echo "Usage: <outputDirectory>"
) else (

    if not exist "abc\cdf" mkdir abc\cdf

    if not exist "xyz" mkdir xyz
    if not exist "xyz\mno" mkdir xyz\mno
    xcopy export xyz\mno /e

    set xyz_JAR=xyz.jar
    set xyz_JAR_PATH=..\app\build\libs\

    set FILES=mno "%xyz_JAR%"

    copy "%xyz_JAR_PATH%%xyz_JAR%" xyz
    //copy ..\app\build\libs\xyz.jar xyz
    set ZIP_FILE=xyz_v0-8-0_export.zip

    if exist "xyz\mno\.zip" del xyz\mno\.zip
    cd "xyz"
    echo '%cd%'
    zip -r %ZIP_FILE% %FILES%
    del %xyz_JAR%
    echo y | del mno\config\*.*
    rmdir mno\config
    rmdir mno\out
    echo y | del /s mno\
    rmdir mno
    move %ZIP_FILE% ..\%1\%ZIP_FILE%
    cd ..
    rmdir xyz
)

这是我的.bat文件,它正在从命令行中完美执行。我想在java中运行相同的操作,我在不同的阶段看到问题

        String command = "packageEGRC_export.bat"+" "+"exportEGRC";
        Process process = Runtime.getRuntime().exec(new String[] {"cmd.exe","/c",command},null,scriptDir);
        InputStream is = process.getInputStream();
        int i = 0;
        while( (i = is.read() ) != -1) {
            System.out.print((char)i);
        }
        process.waitFor();
        int exitValue = process.exitValue();

正在拾取bat文件并执行到某个阶段并且在行

失败
    copy "%xyz_JAR_PATH%%xyz_JAR%" xyz

说无法找到文件路径。但是,如果我用它替换它,它工作正常

    copy ..\app\build\libs\xyz.jar xyz

接下来无法将目录更改为xyz - &gt; cd "xyz",它仍然是执行它的工作目录。

对此有任何帮助将不胜感激。

注意:我不想在.bat文件上进行任何更改,因为它在命令行中运行良好。

2 个答案:

答案 0 :(得分:0)

1)使用绝对路径 2)不要cd,使用pushd更改目录并弹出以更改回来

答案 1 :(得分:0)

看起来问题出在.bat文件本身:你在 if 语句中设置变量,但是在执行之前必须完全读取语句(复合表达式)。这是变量被替换的地方。使用Java执行脚本时,尚未设置环境变量,因此表达式

cd "%var%"

填充空字符串,因此无法找到错误弹出窗口。

如果您在输入之前重写代码以设置变量是否有效。

从命令行调用时也会观察脚本工作,因为这些变量在第一次调用脚本后已经设置好了。只需检查您的原始脚本是否在新打开的cmd.exe中运行。你的脚本应该失败。

以下是一个例子:

@echo off

if "%1" == "" (
    set xyz_JAR=xyz.jar
    set xyz_JAR_PATH=..\bat\

    echo "%xyz_JAR_PATH%%xyz_JAR%"
)

并且调用:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

D:\tmp\bat>test.bat
""

D:\tmp\bat>test.bat
"..\bat\xyz.jar"

D:\tmp\bat>