8

バッチ ファイル内の環境変数で Windows コンソールの現在の幅を取得するにはどうすればよいですか?

4

6 に答える 6

12

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 コンソールの高さが必要な場合は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

これはすべて、Windows XP SP3 のさまざまなウィンドウ (実行中の FAR マネージャーを含む) ですべて試行されたことに注意してください。

于 2013-02-20T13:39:38.733 に答える
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

Windows XP および Windows 7 でテスト済み (両方ともチェコ語)

于 2013-06-11T14:47:02.520 に答える
2

Powershell の(Get-Host).UI.RawUI.WindowSizeプロパティは、現在のコンソール ウィンドウのサイズを設定または返します。for次のようにループでキャプチャできます。

for /f %%I in ('powershell ^(Get-Host^).UI.RawUI.WindowSize.width') do set width=%%I
于 2013-02-20T13:00:31.537 に答える
1

さて、これは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%
于 2013-02-20T13:35:04.850 に答える
0

環境変数で取得することはできませんが、レジストリに保存されるため、バッチ スクリプトからアクセスできます。

それを変更する方法については、ここに回答があります: How to change Screen buffer size in Windows Command Prompt from batch script

reg.exe QUERY [key details]同様に、の代わりに使用できますreg.exe ADD [details]。詳細については、Technet のドキュメントを参照しHKCU\Consoleてください。

于 2013-02-20T11:33:37.713 に答える