如果我正确理解这个批处理脚本
for /f "usebackq tokens=*" %%i in (`time /t`) do (
echo "%%i"
)
echo "done"
应该只打印时间然后“完成”
相反,在我的机器上,Windows 10 Pro x64 它打印
>test.bat
>for /F "usebackq tokens=*" %i in (`time /t`) do (echo "%i" )
>(echo "Active code page: 65001" )
"Active code page: 65001"
>(echo "17:48" )
"17:48"
>echo "done"
"done"
为什么要这样做以及如何修复它,以便它只获取时间而不是“活动代码页:65001”结果。这会破坏构建脚本,因为无论 FOR 命令中使用什么命令,第一行始终是“活动代码页:65001”
需要明确的是,我正在寻找操作系统设置修复,而不是批处理文件的修复。我尝试运行的真正批处理文件来自开源项目中的构建脚本,并且由于此问题而失败。
当我们运行一个命令并得到正确的输出时,但它之前是另一个命令的输出,不知何故,这个意外的命令在我们预期的命令之前运行。
通常的怀疑是使用与我们调用的命令同名创建的批处理文件,但在本例中,time
内部命令,但情况不可能如此,内部命令优先于外部命令(默认行为)。
If time
是一个内部命令,怎么能调用另一个命令呢?
When for /f
需要单独处理命令的输出cmd
创建实例来执行该命令。在这个单独的实例中生成的输出由以下代码处理do
的条款for /f
命令。
这个单独实例的创建可能是意外输出的根源。
阅读显示的帮助信息cmd /?
我们可以看到有两个注册表项
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
可以配置为每次新创建时运行命令cmd
创建实例(除非/D
启动时使用开关cmd
实例)。
这是最有可能找到您获得此信息的原因的地方Active code page: 65001
output.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)