使用VBscript来查找控制台窗口的列宽

batch file中,我可以使用以下示例之一获取控制台窗口的宽度:

Windows环境variables中的控制台宽度

@echo off for /F "usebackq tokens=2* delims=: " %%W in (`mode con ^| findstr Columns`) do set CONSOLE_WIDTH=%%W echo Console is %CONSOLE_WIDTH% characters wide 

同样,我想知道如何获得从命令提示符运行VBScript的父shell的控制台的宽度。 如果我尝试使用VBscript运行上述batch file:

 CreateObject("WScript.Shell").Run "cmd /k FindWidth.bat" 

将打开一个新的控制台,FindWidth.bat给出的宽度是用于新的控制台窗口,而不是父shell的控制台。

使用VBScript我可以使用以下方法find父shell的进程ID: 在一个VBScript中,如何获得运行VB脚本的cmd.exe的进程ID 。 有没有办法做类似的东西来find它的控制台列的宽度? 也许可以使用另一种方法,因为进程ID是已知的?

编辑更新:

我感谢大家的意见。 我会尝试添加更多我想要完成的信息。 我已经有一种工作,但我希望有一个更好的解决scheme。

VBscript直接从命令提示符运行。 不幸的是,VBscript很可能从wscript.exe运行,因为这是正常的Windows安装的默认值。 但我仍然想输出错误消息和其他消息到控制台,而不是一个popup窗口。

如果我可以保证它是用cscript运行的,那就没有问题了。 用cscript重新启动VBscript会启动一个新的进程,所以来自新运行的csript VBscript的任何消息将转到新的控制台而不是原来的控制台。

我有一个解决scheme,但它很笨拙,因为它使用与.vbs相同名称的batch file包装,但使用.bat扩展名而不是.vbs扩展名。 所有批处理脚本都使用cscript运行VB脚本。 在这个主题中提到: 在vbscript中,如何运行一个batch file或命令,以及当前cmd提示符窗口的环境? 我希望find一种方法来摆脱batch file包装,但现在我不认为这是可能的。

我正在尝试使用WScript的另一个解决方法。 由于可以获得控制台窗口的进程ID,因此可以首先通过以下方式确保激活:

 objShell.AppActivate(ProcessID) 

然后脚本可以立即发送消息到原始控制台:

 objShell.SendKeys ":: " & WindowMessage & "{enter}" 

诀窍是使用“::”使消息成为一个不做任何事情的评论。 这工作正常。 一个小问题是,它使得控制台窗口使用最后一个命令缓冲区的注释,所以如果用户按下向上箭头或F3等,则注释显示为它们自己键入的命令。 这是令人讨厌的,但因为这只是一个评论,没有错误产生,并没有太大的问题。

令人讨厌的部分是消息与普通命令出现在同一行,看起来不像一个正确的cscript发送消息。 我想要控制台的宽度的原因是通过缓冲它的正确数量的空间来格式化消息,以便它看起来与从cscript发送的消息相同。 然后它会看起来像真正的stdout输出,除了邮件开头的“::”。

该脚本可以只读取命令提示符的默认设置,但在很多情况下不能正确格式化。

如果我可以find一种方法去与SendKeys一个新的行,并在PROMPT出现之前发送消息,这将做同样的事情。 在PROMPT出现之前是否有可以发送新字符的字符?

有没有使用VBscript注入文本消息到特定控制台窗口的标准输出的方法。 因为进程ID已知控制台应该得到标准输出,是否有可能的脚本VB脚本运行另一批处理脚本或另一个程序静默,可以使用进程ID注入到原始控制台窗口的标准输出。

最终,我只想让VBscript文件直接在可以输出消息到同一控制台的命令提示符下运行。 但要做到这一点似乎需要用户input“cscript scriptname.vbs参数”而不是“scriptname arguments”,这是应该是可能的,但显然不是! 使用batch file包装是另一种select,可以让用户直接运行不同的batch file而不是VBscript文件。 我想我需要用真正的计算机语言来重做脚本,而不是使用脚本语言来使其正常工作。 我真的不明白为什么用VBscript来完成这个工作很困难,看起来应该是微不足道的。

当WScript根本不允许任何控制台输出时,Windows设置VBscript默认使用WScript有点烦人。 但CSCript可以做Windowspopup窗口和控制台输出。 为什么即使有WScript和CScript的区别呢,似乎所有的事情都可以用CScript来完成呢?