首页 > 解决方案 > Windows 10 与 Windows 7 中的批处理文件调用命令

问题描述

我有一个使用 Call 函数的批处理脚本,但是当它在我的 Windows 7 机器和我的 Windows 10 机器上运行时,我注意到不同的行为。我无法在这个问题上找到很多关于 Windows 版本之间差异的信息。

脚本很简单:

@echo off
chdir /D "%~dp0"
call "C:\Users\username\desktop\temp\batch.bat" >Test.txt
pause

在batch.bat中,有一行java:

@echo off
cd /D "%~dp0"

java -classpath "../jars/*" com.scraper_program.cui.Main show --log="../conf/log.settings"

在 Windows 7 上,这会正确地将 java 调用中的文本输出到文件 Test.txt 中;但是在 Windows 10 上,它会在新窗口中打开 java 部分并且无法重定向到文本文件。

打开的新窗口在左上角有一个“java”图标,因此看起来 Windows10 可能出于某种原因对 Java 部分进行了不同的处理。

两台机器之间关于脚本和变量位置的一切都是相同的。有没有像在 Windows 7 中那样将脚本输出到 Windows 10 中的文本文件?

编辑:

问题出在java控制台上。这是一个批处理文件,代码无关紧要,所以以上所有内容基本上都是毫无价值的信息:(

只需在命令行中输入“java -help”即可重现该问题。在 windows 7 机器上,它将帮助文本直接输出到控制台,而在我的 windows 10 机器上,它会打开一个新窗口,执行并立即关闭。我在这里发现了另一个具有相同问题的帖子:Java 执行弹出一个新窗口并立即消失

然而,没有解决方案。

将 java.exe 文件直接拖放到控制台中以提供 exe 的完整路径会产生相同的结果 - 它会在屏幕上短暂闪烁并关闭。

我还验证了控制面板中的 Java 设置在两个系统之间是相同的,并且 Java.exe 的相同环境路径是相同的。

编辑2:

根据要求,这是我的环境变量。

设置路径的输出:

Path=C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Gpg4win\..\GnuPG\bin;C:\Drivers
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

Java的输出:

C:\ProgramData\Oracle\Java\javapath\java.exe

标签: batch-file

解决方案


我找到了一种方法,可以通过以管理员身份运行命令行(右键单击->以管理员身份运行)从 java 行获取调用以输出到同一窗口并正确重定向到文本文件。

一旦我发现了这一点,我就按照此处发布的解决方案为 bat 文件创建了一个快捷方式:如何编写 BAT 文件以始终以管理员模式运行?

我仍然不确定为什么我需要在一台机器上而不是另一台机器上进行这项工作,所以它并不完美,但它确实有效。


推荐阅读