Как изменить размер буфера экрана в командной строке Windows из пакета script
Я знаю, что вы можете сделать свойства правого щелчка → макет и там его изменить вручную.
Но как бы вы решили изменить его из пакета Windows script?
Я знаю, что вы можете изменить его размер из script, используя что-то вроде этого
MODE CON: COLS=90 LINES=10
Но как вы можете изменить размер буфера?
script будет выполняться некоторое время, а иногда до сбоя и выхода из него требуется некоторое время, поэтому мне нужен больший буфер.
Ответы
Ответ 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"