Подтвердить что ты не робот

Как изменить размер буфера экрана в командной строке Windows из пакета script

Я знаю, что вы можете сделать свойства правого щелчка → макет и там его изменить вручную.

Но как бы вы решили изменить его из пакета Windows script?

Я знаю, что вы можете изменить его размер из script, используя что-то вроде этого

MODE CON: COLS=90 LINES=10

Но как вы можете изменить размер буфера?

script будет выполняться некоторое время, а иногда до сбоя и выхода из него требуется некоторое время, поэтому мне нужен больший буфер.

4b9b3361

Ответ 1

Я просто искал ответ на этот точный вопрос, пришел, чтобы узнать, что сама команда настраивает буфер!

mode con:cols=140 lines=70

Часть lines = 70 фактически регулирует высоту в настройке "Размер буфера экрана", а не "Высота" в настройке "Размер окна".

Легко проверить, выполнив команду с параметром "lines = 2500" (или любым необходимым буфером), а затем проверьте "Свойства" окна, вы увидите, что на самом деле для буфера теперь установлено значение 2500.

Моя партия script выглядит следующим образом:

@echo off
cmd "mode con:cols=140 lines=2500"

Ответ 2

Я просто попробовал max строк в Windows 7, я могу установить с помощью команды mode con и нашел, что это 32766 2 ^ 15-2, и вы можете установить его с помощью следующей команды

mode con lines=32766

хотя вы также можете установить размер буфера экрана из графического интерфейса, но максимальный размер может быть равен 9999.

Ответ 3

mode con lines=32766

устанавливает буфер, но также увеличивает высоту окна до полного экрана, что является уродливым.

Вы можете изменить настройки непосредственно в реестре:

:: escape the environment variable in the key name
set mySysRoot=%%SystemRoot%%

:: 655294544 equals 9999 lines in the GUI
reg.exe add "HKCU\Console\%mySysRoot%_system32_cmd.exe" /v ScreenBufferSize /t REG_DWORD /d 655294544 /f

:: We also need to change the Window Height, 3276880 = 50 lines
reg.exe add "HKCU\Console\%mySysRoot%_system32_cmd.exe" /v WindowSize /t REG_DWORD /d 3276880 /f

Следующий cmd.exe, который вы запускаете, имеет буфер увеличения.

Таким образом, это не работает для cmd.exe, который вы уже используете, но просто используйте это в pre-batch.cmd, чем называет ваш основной script.

Ответ 4

Ниже представлена ​​очень простая программа VB.NET, которая будет делать то, что вы хотите.

Он установит буфер до 100 символов в ширину на 1000 символов. Затем он устанавливает ширину окна в соответствии с размером буфера.

Module ConsoleBuffer
  Sub Main()
    Console.WindowWidth = 100
    Console.BufferWidth = 100
    Console.BufferHeight = 1000
  End Sub
End Module

UPDATE

Я изменил код на первый набор Console.WindowWidth, а затем установил Console.BufferWidth, потому что если вы попытаетесь установить Console.BufferWidth на значение меньше текущего Console.WindowWidth, программа выдает исключение.

Это всего лишь образец... вы должны добавить код для обработки параметров командной строки и обработки ошибок.

Ответ 5

Там решение CMD: установите высоту буфера независимо от высоты окна, эффективно используя команду powershell, выполненную из пакета script. Это решение позволяет мне изменять размер буфера прокрутки в существующем пакете script независимо от размера окна, именно то, о чем просил OP.

Предостережение. Кажется, что переменные script забывают (или, по крайней мере, с моим script), поэтому я рекомендую вызывать команду только в начале и/или конце вашего script или иначе где вы не зависите от локальной переменной сеанса.

Ответ 6

Вот что я сделал, если кто-то нашел это полезным (я использовал много вещей в соответствии с остальными ответами в этом потоке):

Сначала я скорректировал настройки макета по мере необходимости. Это немедленно меняет размер окна, поэтому было проще установить точный размер, который я хотел. Кстати, я не знал, что у меня также может быть видимая ширина меньше ширины. Это было приятно, так как я обычно ненавижу длинную линию, которую можно обернуть. enter image description here

Затем, щелкнув ok, я открыл regedit.exe и перешел в "HKEY_CURRENT_USER\Console". Существует новая дочерняя запись "% SystemRoot% _system32_cmd.exe". Я щелкнул правой кнопкой мыши на этом и выбрал Экспорт: enter image description here

Я сохранил это как "cmd_settings.reg". Затем я создал пакет script, который импортирует эти параметры, вызывает мою исходную партию script (имя batch_script.bat), а затем удаляет импортированные данные, чтобы окно командной строки возвращалось к настройкам по умолчанию:

regedit /s cmd_settings.reg
start /wait batch_script.bat
reg delete "HKEY_CURRENT_USER\Console\%%SystemRoot%%_system32_cmd.exe" /f

Это примерная партия, которая может быть вызвана ( "batch_script.bat" ):

@echo off
echo test!
pause
exit

Не забывайте команду exit в конце script, если вы хотите, чтобы строка удаления reg запускалась после выполнения script.

Ответ 7

Нет командной строки DOS. DOS полностью умерла с Windows ME (7/11/2006). Он просто называется командной строкой в ​​Windows NT (NT, 2K, XP, Vista, 7).

Невозможно изменить буфер экрана с помощью встроенных команд cmd.exe. Его можно изменить с помощью Функции API консоли, чтобы вы могли создать служебную программу для ее изменения. Я никогда не пробовал это сам.

Еще одно предложение - перенаправить вывод как на файл, так и на экран, чтобы у вас была "печатная копия". Windows не имеет команды TEE, например Unix, но кто-то исправил это.

Ответ 8

Я создал следующую утилиту для установки размера консоли и буферов прокрутки.

Я скомпилировал его с помощью DEV С++ (http://www.bloodshed.net/devcpp.html).

Исполняемый файл включен в https://sourceforge.net/projects/wa2l-wintools/.

#include <iostream>
#include <windows.h> 

using namespace std;


// SetWindow(Width,Height,WidthBuffer,HeightBuffer) -- set console size and buffer dimensions
//
void SetWindow(int Width, int Height, int WidthBuffer, int HeightBuffer) { 
    _COORD coord; 
    coord.X = WidthBuffer; 
    coord.Y = HeightBuffer; 

    _SMALL_RECT Rect; 
    Rect.Top = 0; 
    Rect.Left = 0; 
    Rect.Bottom = Height - 1; 
    Rect.Right = Width - 1; 

    HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE);      // Get Handle 
    SetConsoleScreenBufferSize(Handle, coord);            // Set Buffer Size 
    SetConsoleWindowInfo(Handle, TRUE, &Rect);            // Set Window Size 
}  // SetWindow



// main(Width,Height,WidthBuffer,HeightBuffer) -- main
//
int main(int argc, char *argv[]) {     
    int width = 80;
    int height = 25;
    int wbuffer = width + 200;
    int hbuffer = height + 1000;

    if ( argc == 5 ){
        width = atoi(argv[1]);
        height = atoi(argv[2]);
        wbuffer = atoi(argv[3]);
        hbuffer = atoi(argv[4]);
    } else if ( argc > 1 ) {
        cout << "Usage: " << argv[0] << " [ width height bufferwidth bufferheight ]" << endl << endl;
        cout << "  Where" << endl;
        cout << "    width            console width" << endl;
        cout << "    height           console height" << endl;
        cout << "    bufferwidth      scroll buffer width" << endl;
        cout << "    bufferheight     scroll buffer height" << endl;
        return 4;
    }    

    SetWindow(width,height,wbuffer,hbuffer);
    return 0;
} 

Ответ 9

Если кому-то все еще интересно, в новых версиях окон вы можете использовать powershell:

powershell.exe -command "& {$pshost = Get-Host;$pswindow = $pshost.UI.RawUI;$newsize = $pswindow.BufferSize;$newsize.height = 150;$pswindow.buffersize = $newsize;}"

Ответ 10

Вы можете изменить размер буфера cmd, щелкнув значок в верхнем левом углу → свойства → макет → размер буфера экрана.
вы можете даже изменить его с помощью команды cmd

mode con:cols=100 lines=60
Upto lines = 58 изменяется высота окна cmd.
После того, как значение строки составляет 58, размер буфера cmd изменяется...

Ответ 11

Я нашел способ изменить размер буфера без влияния на размер окна. Он работает благодаря недостатку в том, как работает пакет, но он выполняет свою работу.

mode 648 78 >nul 2>nul

Как это работает? В этой команде есть синтаксическая ошибка, она должна быть "mode 648, 78". Из-за того, как работает пакет, размер буфера сначала будет изменен до 648, а затем изменится размер окна, но он никогда не завершится из-за синтаксической ошибки. Voila, размер буфера регулируется, а размер окна остается прежним. Это вызывает уродливую ошибку, поэтому, чтобы избавиться от нее, просто добавьте " > nul 2 > nul", и все готово.

Ответ 12

Я расширяю комментарий, который я разместил здесь, так как большинство людей не замечают комментарий.

https://lifeboat.com/programs/console.exe - это скомпилированная версия программы Visual Basic, описанная на fooobar.com/info/121070/.... Моя версия просто устанавливает высоту буфера 32766, которая является максимальной доступной высотой буфера. Он ничего не корректирует. Если есть большой спрос, я мог бы создать более гибкую программу, но обычно вы можете просто установить другие переменные на вкладке макета ярлыка.

Ниже приведена цель, которую я использую в своем ярлыке, где я хочу начать в каталоге f. (Я должен установить каталог таким образом, поскольку Windows не позволит вам установить его каким-либо другим способом, если вы хотите запустить командную строку как администратор.)

C:\Windows\System32\cmd.exe /k "console & cd /d c:\f"