【发布时间】:2014-03-20 18:42:27
【问题描述】:
我正在使用 Apache exec lib 运行以下命令。
wmic LOGICALDISK GET Name,ProviderName /FORMAT
此命令返回所有映射驱动器及其映射的列表。当我从命令行运行它时,它工作得很好。当我从 java 中运行它时,它返回前 2 个驱动器和中间列出的驱动器中的 1 个。
我已经将流通过管道传输到标准输出,使用了流 gobbler 等。我运行的其他几个命令都可以正常工作,并且我毫无问题地读取了流。我难住了。有任何想法吗?编码可能吗?我以前从来没有遇到过这个问题。
哦,我还使用 ProcessBuilder、Runtime.exec 和 DefaultExecutor 运行。始终相同的结果。
谢谢。
【问题讨论】:
-
您是否尝试过运行“wmic LOGICALDISK GET Name,ProviderName /FORMAT > file.txt”并将其与您的结果进行比较?
-
真的很奇怪。我的 jar 中有 mappings.cmd 文件,只需将其转储为 tmp 文件,以便我可以运行它。我正在使用 Netbeans,它会让我在内部执行文件。 Netbeans 甚至得到相同的输出。从命令行运行输出 C: D: G: \\SomeMachine\somedir F: \\SomeOtherMachine\otherdir Y: \\DomainController\domain Z: \\DBServer\dbdir 我从 java 运行时 C 执行它时得到的输出: D: F: \\SomeOtherMachine
-
我执行了 rediredt 命令。如果我从命令行运行,那就完美了。如果我从 java 运行,文件中的输出仍然混乱。
-
你确定你从进程的 stout 和 stderr 中读取?
-
是的。我已经做了一百万种方法。奇怪的是,如果我从 ide 中将命令作为批处理文件运行,Netbeans 会得到相同的输出。我已经将 /OUTPUT 和 /APPEND 标记设置为文件、标准输出等。我可能只需要找到一种方法来使用启动批处理在启动时运行脚本,然后编写输出。