环境变量中的Windows控制台宽度

时间:2013-02-20 11:19:11

标签: windows command-line batch-file console cmd

如何在批处理文件中的环境变量中获取Windows控制台的当前宽度

6 个答案:

答案 0 :(得分:11)

我喜欢在Windows中使用内置mode命令的方法。 请尝试以下批处理文件:

@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

请注意,这将返回控制台缓冲区的大小,而不是窗口的大小(可滚动)。

如果您想要Windows控制台的高度,可以将Columns表达式中的findstr替换为Lines。再次,它将返回缓冲区的高度,而不是窗口...我个人喜欢有一个大缓冲区允许滚动回历史记录,所以对我来说,线通常报告大约3000:)


只是为了好玩,这是一个没有使用findstr过滤输出的版本......如果(出于某种原因)你不喜欢findstr

@echo off
for /F "usebackq tokens=1,2* delims=: " %%V in (`mode con`) do (
    if .%%V==.Columns (
        set CONSOLE_WIDTH=%%W
        goto done
    )
)
:done
echo Console is %CONSOLE_WIDTH% characters wide

请注意,这些都是在Windows XP SP3中尝试过的,在许多不同的窗口中(包括一个执行FAR管理器)。

答案 1 :(得分:4)

试试这个(语言/语言环境/ .net独立):

@ECHO OFF
SET "ConsoleWidth="
SET /A LINECOUNT=0
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=1,2,*" %%A IN ('mode con') DO (SET /A LINECOUNT=!LINECOUNT!+1&IF !LINECOUNT! EQU 4 SET ConsoleWidth=%%B)
SETLOCAL DISABLEDELAYEDEXPANSION
SET "LINECOUNT="
ECHO ConsoleWidth: %ConsoleWidth% characters

在Windows XP和Windows 7上以捷克语进行测试

答案 2 :(得分:2)

Powershell的(Get-Host).UI.RawUI.WindowSize属性设置或返回当前控制台窗口的尺寸。您可以使用for循环捕获它:

for /f %%I in ('powershell ^(Get-Host^).UI.RawUI.WindowSize.width') do set width=%%I

答案 3 :(得分:0)

您无法在环境变量中获取它,但它存储在注册表中,因此您可以从批处理脚本中访问它。

这里有关于如何更改它的答案: How to change Screen buffer size in Windows Command Prompt from batch script

以类似的方式,您可以使用reg.exe QUERY [key details]而不是reg.exe ADD [details]。有关详细信息,请参阅HKCU\Console {{1}}。

答案 4 :(得分:0)

好的,这是一个不需要安装PowerShell的软件。它编写,运行和删除.Net应用程序以设置批处理脚本变量。 :)

@echo off
setlocal
pushd "%windir%\microsoft.net\"
for /f "delims=" %%I in ('dir /s /b csc.exe') do (
    set csc=%%I
    goto next
)
:next
popd
echo using System;>width.cs
echo class Width {>>width.cs
echo public static void Main() {>>width.cs
echo string m1 = "{0}";>>width.cs
echo Console.WriteLine^(m1, Console.WindowWidth^); } }>>width.cs
"%csc%" /out:width.exe width.cs >NUL 2>NUL
for /f %%I in ('width.exe') do set width=%%I
del width.exe width.cs
echo %width%

答案 5 :(得分:0)

仅需一行:

for /f tokens^=2 %%w in ('mode con^|find "Col"')do set _width=%%~w"