batch-file - 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
解决方案
我找到了一种方法,可以通过以管理员身份运行命令行(右键单击->以管理员身份运行)从 java 行获取调用以输出到同一窗口并正确重定向到文本文件。
一旦我发现了这一点,我就按照此处发布的解决方案为 bat 文件创建了一个快捷方式:如何编写 BAT 文件以始终以管理员模式运行?
我仍然不确定为什么我需要在一台机器上而不是另一台机器上进行这项工作,所以它并不完美,但它确实有效。
推荐阅读
- visual-studio-code - 扩展的内容在发布后不加载
- python - 如何使用相机和物体之间的像素数来测量单目相机和检测到的车辆之间的距离。张量流蟒蛇
- bash - 将输出转换为键=值对
- authentication - LTE调制解调器和PPP认证
- flutter - 无法将容器放在可滚动的 sliverlist 内的堆栈中
- python - seaborn图中的列宽不一样
- javascript - 如何使用 VS Code 在 Super Test 中运行或调试单个测试用例
- azure - Azure - 无法使用 Log Analytics 收集自定义日志
- wordpress - 使用 nginx 提供具有无效名称的资产文件
- django - 使用 Django,当我尝试访问应该存在的页面时,为什么找不到 404 错误页面?