Windows环境variables中的控制台宽度

我怎样才能得到一个batch file中的环境variables的Windows控制台当前宽度

我喜欢在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控制台的高度,你可以用Lines来替换findstr表达式中的Columns 。 同样,它会返回缓冲区的高度,而不是窗口…我个人喜欢有一个很大的缓冲区,允许通过历史回滚,所以对于我来说,行通常报告约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经理)尝试。

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

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

试试这个(language / locale / .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上进行测试,都是捷克语

你不能在一个环境变量中得到它,但它存储在注册表中,所以你可以从批处理脚本中访问它。

这里有关于如何改变它的答案: 如何在批处理脚本中更改Windows命令提示符中的屏幕缓冲区大小

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

好吧,这是一个不需要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%