如何修复使用 TCC/LE 启动 CmdInit.cmd 导致的未知命令错误?

如何修复使用 TCC/LE 启动 CmdInit.cmd 导致的未知命令错误?

TCC.exe当您尝试通过从 ConEmu执行脚本来启动 TCC/LE 控制台时cmdInit.cmd,您会收到此错误:

TCC: C:\[...]\ConEmu\cmdInit.cmd [8] Unknown command "C:\WINDOWS\system32\find.exe Windows"

如何避免此错误并修复与从 TCC/LE 初始化 ConEmu 提示相关的任何问题?

答案1

未知命令错误

该错误与 ConEmu cmdInit.cmd 的此行有关:

cmd /d /c ver | "%windir%\system32\find.exe" "Windows"

TCC/LE 正在破坏该命令,并且最终执行了以下操作:

cmd /d /c ver | "%windir%\system32\find.exe Windows"

修改后的版本是无效命令,这就是我们收到错误的原因。修复此问题非常简单,只需让 TCC/LE 知道我们不希望它使用以下替换命令“有帮助地”自动连接我们的字符串即可:

cmd /d /c ver | %@QUOTE[%windir%\system32\find.exe] "Windows"

此修复使用@QUOTE 命令仅在需要时才在文件路径中添加双引号。在 Windows 的标准安装中,路径中不会有任何空格find.exe,所以现在我们不需要引号,TCC/LE 也不会通过组合东西来破坏我们的命令。


Windows 版本信息不正确

不幸的是,对于像我这样挑剔的人来说,Windows 10 上的默认 TCC/LE 提示符还有一个问题。TCC/LE 认为所有 Windows 版本字符串都以“6.3”开头。(我相信旧版 Windows 曾经以这种方式进行版本控制),导致它在修复上述错误后打印以下初始提示:

TCC LE  14.00.9 x64   Windows 10 [Version 6.3.17763]
Copyright 2016 JP Software Inc.  All Rights Reserved

Microsoft Windows [Version 10.0.17763.346]

emily@EMILY-LAPTOP C:\Users\emily
$

我发现在同一台机器上打印两个不同的 Windows 版本非常烦人,因此我开发了一个针对此错误的附加修复程序,对脚本进行了额外的修改cmdInit.cmd。该修复程序是用这个经过更广泛修改的命令替换默认命令的修复版本:

cls &^
echos TCC LE  %_4VER%.%_BUILD% %@IF["%_X64%" == "1",x64,x86]`   `&^
cmd /d /c ver | %@QUOTE[%windir%\system32\find.exe] "Windows"

此命令会删除原始错误提示,然后用包含 TCC/LE 版本信息(使用 TCC/LE 内部变量)以及正确 Windows 版本的提示替换它。此外,修复版本继续正确打印出处理器架构(x86 或 x64),并包含与原始版本相同的不均匀间距(前后各有两个空格14.00.9 x64,但后面还有一个空格,导致前面有 2 个空格,后面有 3 个空格)。支持 Windows 10 的修复版本在运行时会打印以下输出(您的机器的特定版本和处理器架构可能不同):

TCC LE  14.00.9 x64   Microsoft Windows [Version 10.0.17763.346]

emily@EMILY-LAPTOP C:\Users\emily
$ 

嵌入式修复

这是修复的最终复制/粘贴版本,其中包含注释,您可以将其用作复制/粘贴插件:

rem Simple "ver" prints empty line before Windows version
rem Use this construction to print just a version info
rem cmd /d /c ver | "%windir%\system32\find.exe" "Windows"

rem This is a fixed version of the original version printout for TCC/LE
rem cmd /d /c ver | %@QUOTE[%windir%\system32\find.exe] "Windows"

rem This is a fully fixed version which prints out the correct 
rem version string for the Windows installation
cls & echos TCC LE  %_4VER%.%_BUILD% %@IF["%_X64%" == "1",x64,x86]`   `& cmd /d /c ver | %@QUOTE[%windir%\system32\find.exe] "Windows"

记得复制一份cmdInit.cmd(可能是cmdInitTCC.cmd),将 ConEmu 的 TCC/LE 任务指向已编辑的 副本cmdInit.cmd。如果您cmdInit.cmd直接编辑,下次更新 ConEmu 时,它将破坏您的修改(脚本顶部有一个警告)。我使用以下命令从 ConEmu 使用名为 的副本启动 TCC/LE cmdInitTCC.cmd%ConEmuDrive%\Programming\Links\tcc_le-x64\tcc.exe /k %ConEmuBaseDir%\cmdInitTCC.cmd" -new_console:d:%USERPROFILE%

相关内容