我怎样才能得到一个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%