我怎样才能获得Windows控制台的当前宽度在一个批处理文件中的环境变量?
Answer 1:
我喜欢使用内置的方法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
请注意,这将返回控制台缓冲区的大小,而不是窗口(这是滚动)的大小。
如果你想在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管理器)。
Answer 2:
试试这个(语言/区域/ .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,无论是在捷克语测试
Answer 3:
PowerShell的(Get-Host).UI.RawUI.WindowSize
属性设置或返回当前控制台窗口的尺寸。 你可以用它拍摄for
循环正是如此:
for /f %%I in ('powershell ^(Get-Host^).UI.RawUI.WindowSize.width') do set width=%%I
Answer 4:
你不能把它在一个环境变量,但它存储在注册表中,所以你可以从你的批处理脚本访问它。
这里有关如何更改它有答案: 如何在Windows命令更改屏幕缓冲区大小从批处理脚本提示
以类似的方式,你可以使用reg.exe QUERY [key details]
而不是reg.exe ADD [details]
。 请参阅TechNet文档的HKCU\Console
的详细信息。
Answer 5:
好吧,这里是一个不需要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%
文章来源: Windows console width in environment variable