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

Axe*_*ine 6 windows console command-line cmd batch-file

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

ica*_*bod 11

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

@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
Run Code Online (Sandbox Code Playgroud)

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

如果您想要Windows控制台的高度,可以Columnsfindstr表达式中替换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
Run Code Online (Sandbox Code Playgroud)

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

  • 如果系统使用除英语之外的任何其他语言,则此方法会崩溃.如果你想要语言独立,请查看@ user2475020的答案. (2认同)

小智 5

试试这个(语言/区域设置/.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
Run Code Online (Sandbox Code Playgroud)

在 Windows XP 和 Windows 7 上进行了测试,均为捷克语