- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的 java 应用程序中执行批处理文件。
我想这样执行:
String[] args = new String[] {
"C:/Users/User1/Desktop/Bachelor Thesis/JDBC Connector/jdbc_5.2_sp1_patch05/bin/connect.bat",
"start",
"-f",
"C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/etc/db.xml" };
Process p = Runtime.getRuntime().exec(args);
p.waitFor();
BufferedReader prout = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String buffer;
while ((buffer = prout.readLine()) != null) {
System.out.println(buffer);
buffer = prout.readLine();
}
解释:
让我们考虑一下我将使用正常的 cmd 执行。我会打开cmd,然后我会转到我的目录:
cd C:/Users/User1/Desktop/Bachelor Thesis/JDBC Connector/jdbc_5.2_sp1_patch05/bin
战后我将使用以下命令启动批处理文件:
connect start -f C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/etc/db.xml
在命令行上这工作正常,它启动批处理,并且在该批处理内有一个启动的子进程:
if exist %JAVA_HOME%\bin\java.exe (
java -XX:NewSize=%NEWSIZE% -XX:NewRatio=1 -Xms%MAXHEAP% -Xmx%MAXHEAP% -Dfile.encoding=%ENCODING% -Djava.ext.dirs=%EXT_DIR% com.fastsearch.esp.connectors.jdbc.JDBCConnector %1 %2 %3 %4 %5 %6 %7
) else (echo Is JAVA_HOME=%JAVA_HOME% set correctly?)
但是当我在 Java 应用程序中执行时,我遇到了以下问题:它只打印我的批处理文件的第一个回显,但子进程没有启动。当我捕获错误流(如顶部代码所示)时,它会显示:
UNC-Pfade werden nicht unterstützt. (UNC-Paths are not supported)
java.lang.NoClassDefFoundError: com/fastsearch/esp/connectors/jdbc/JDBCConnector
经过一番研究,我发现 cmd 由于当前工作目录或类似原因而无法启动子进程。我不太明白。
实际情况是,我想在我的 Java 应用程序中执行批处理文件及其必要的参数(start、-f 和路径)。当我直接在 cmd 上执行语句时,一切正常,但在我的 java 应用程序中却很糟糕。
这是完整的批处理文件,也许这有帮助:
@echo off
rem This bat file should setup the java env and run the connector manager
SETLOCAL
echo Copyright (c) Microsoft Corporation. All rights reserved.
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
rem Java 1.6 must be installed and set here
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if NOT defined JAVA_HOME (
echo Sorry..
echo You have NOT set JAVA_HOME - Should point to where JRE 1.6.x or later is installed
echo Exiting.......
goto end
)
set JAVA_HOME=%JAVA_HOME%
:: Remove quotes if exist, then add quotes in case spaces
SET JAVA_HOME=###%JAVA_HOME%###
SET JAVA_HOME=%JAVA_HOME:"###=%
SET JAVA_HOME=%JAVA_HOME:###"=%
SET JAVA_HOME=%JAVA_HOME:###=%
SET JAVA_HOME="%JAVA_HOME%"
SET PATH=%JAVA_HOME%\bin
SET EXT_DIR=..\lib;%JAVA_HOME%\lib;%JAVA_HOME%\lib\ext
SET CLASSPATH=..\etc
SET MAXHEAP=1408m
SET NEWSIZE=256m
SET ENCODING=UTF8
if exist %JAVA_HOME%\bin\java.exe (
java -XX:NewSize=%NEWSIZE% -XX:NewRatio=1 -Xms%MAXHEAP% -Xmx%MAXHEAP% -Dfile.encoding=%ENCODING% -Djava.ext.dirs=%EXT_DIR% com.fastsearch.esp.connectors.jdbc.JDBCConnector %1 %2 %3 %4 %5 %6 %7
) else (echo Is JAVA_HOME=%JAVA_HOME% set correctly?)
:end
最佳答案
正如您所提到的,您的问题很可能是您没有从正确的目录执行批处理文件。当您打开命令行控制台并 cd
进入包含批处理文件的目录时,该操作会设置正确的当前工作目录
(CWD)。
您可以通过在输入批处理文件之前或之后更改 CWD 来解决该问题。
<小时/>让我们从在批处理文件中使用 CWD 开始;我们这里也有很多选项,但让我们保持简单,只需更改 CWD:
set MYDIR=%~dp0
cd %MYDIR%
第一行使用了一些批处理文件魔法来获取当前正在执行的批处理文件所在的目录。那将是“C:/Users/User1/Desktop/Bachelor Thesis/JDBC Connector/jdbc_5.2_sp1_patch05/bin/”
您可以使用 Runtime.getRuntime().exec()
的替代形式来更改 CWD:Runtime.getRuntime().exec(String[] cmdarray, String[] envp, 文件目录)
调用方式:
File workingDir = new File("C:/Users/User1/Desktop/Bachelor Thesis/JDBC Connector/jdbc_5.2_sp1_patch05/bin/");
Runtime.getRuntime().exec(args, null, workingDir);
我强烈建议您为工作目录声明一个static final const
值,或者找到某种方法来消除程序中该值的硬编码。
关于Java 应用程序 : Execute Batch File with subprocess/UNC Path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11721294/
好吧,我已经在这个问题上挣扎了很长时间了。我有一个项目来比较两个文件夹,两台服务器各一个。我们正在将源服务器上的文件与目标服务器上的文件进行比较,并将创建一个源文件列表,一旦目标服务器上完成更新,就需
我有一个 UNC 路径 \\houtester\common\log library\graphics 我需要在我的 c# 程序中使用它,显然它不会不会因为那个空白空间。我怎样才能让这条路起作用? 谢
我有一个 C# 进程需要读取远程服务器共享目录中的文件。 以下代码导致“共享不存在”。正在写入控制台。 string fileName = "someFile.ars"; string fileLoc
我的电脑装有 Windows XP,但没有互联网连接,只能访问网络驱动器。我想在网络驱动器上设置一个 git 存储库,然后从我的本地存储库推送到它,这样我就可以在一天结束时去一台有互联网连接的计算机并
是否有用于从 UNC 路径确定 NAS 存储上的可用空间的编程 API?我查看了 WMI 文档,并不清楚这是可能的。 非常感谢代码示例和对相关 API 调用的引用。 最佳答案 在 Windows AP
这是我遇到的问题: # The following line works Add-Content -LiteralPath "$Env:USERPROFILE\Desktop\[Test].txt"
我在从 Delphi 程序写入 Windows 7 中的映射网络驱动器 (P:) 时遇到一些问题。例如,当我尝试 ForceDirectories('P:\test\folder') 时,出现错误(找
我在为 Outlook 编写的 VSTO 加载项中有以下代码: savefolder = Regex.Replace(Guid.NewGuid().ToString(), @"[- ]
我正在尝试从 UNC 路径名的根获取文件夹和文件。我正在使用 Get-ChildItem。 我可以通过 UNC 路径从子文件夹获取结果,但不能从根文件夹获取结果。如果从命令行运行命令Get-Child
如果用户尚未安装远程驱动器并且仅使用 \\ 语法,如何将字符串中保存的此类路径 (\\nas) 转换为Java 中的文件,抱歉不太确定您如何称呼此 \\ 命名。 这个也是windows特有的吗,也可以
我们有似乎运行良好的批处理脚本,但是我正在编辑其中一个脚本以包含一些新工作,并且在手动运行脚本时(通过在 Windows 资源管理器中双击),每次在脚本中执行 pushd 命令时,我都会收到上述错误消
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我正在编写一个应用程序,需要从当前正在执行文件的网络目录中复制文件。 我试过用打开文件 using (var source = new FileStream(fileData.FileName,
我正在尝试使用以下代码检索一个目录的文件列表: string[] files = System.IO.Directory.GetFiles(source); 如果我尝试从本地目录检索它们,假设是 C:
我看到了很多示例,但我没有找到适合我的问题的东西。 这个问题是:我有一个用 C# 编写的程序。我使用的是 clickonce UNC 系统。 有了桌面上的快捷方式,就没有问题了。 但我想要针对特定
我正在研究一种在同一台远程机器上复制大文件的高效解决方案,我们称它为 FILESERVER。然后,我想从另一台服务器 (WEBSERVER) 远程发布这些文件的副本,所以我尝试使用 Windows 资
可能听起来很疯狂,但我想将一些 javadoc 文档链接到网络上存在的文件。这是从标准 UNC 路径访问的。 我想使用如下方式链接: /** * This class does something
同题;如何访问 ShareFolder 中的 UNC 位置? URL uri = new URL("file:\\\\x.x.1.10\\myUNC"); File file = new File(u
我正在寻找一种从映射网络驱动器获取“真实”UNC 路径的方法——这是一个常见问题,但没有使用我想要的语言或方法。 我希望用户能够使用 HTML 表单选择文件,但不能上传它(文件很大)。我只想获得文件的
我正在从我的程序(用 C++ 编写)连接到一个 unc 服务器 (\blablub\share)。现在我正在使用 WNetUseConnection 函数连接到服务器。现在我只想限制对程序的访问。因为
我是一名优秀的程序员,十分优秀!