@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文件上进行任何更改,因为它在命令行中运行良好。
答案 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>