Найти текущий размер консоли в пакете - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над командным файлом, и мне нужно напечатать дефисы (-) на экране в качестве разделителя.Есть ли команда fast (до двух секунд), которая может это сделать?

Я выполнил несколько поисковых запросов и не смог найти ответ на разных веб-сайтах.

(code to find screen size) 
for /l %%a in (1,1,%screen size var%) do (set "line=%line%-")
echo %line%

В выходных данных должна отображаться строка дефисов через консоль.

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Это не проверено, но основано на выводе Mode CON, использованном в ответе gjpio :

@Echo Off
For /F "Skip=4Tokens=1*Delims=:" %%A In ('Mode CON')Do (For /L %%C In (1,1,%%B)Do @Set/P "=-"<Nul)&Echo( &GoTo :Draw
:Draw
Pause

Если вы намерены использовать разделитель несколько раз в вашемСценарий, который вы можете сохранить в переменную:

@Echo Off
For /F "Skip=4Tokens=1*Delims=:" %%A In ('Mode CON')Do (For /L %%C In (1,1,%%B)Do (Call Set "separator=%%separator%%-"))&GoTo :Next
:Next
Echo Welcome to %~nx0
Echo %separator%
Pause

В качестве заключительной запоздалой мысли, и на тот случай, если вы считаете, что она будет работать быстрее, я подумал, что лучше предоставить версию с использованием отложенного расширения:

@Echo Off&SetLocal EnableDelayedExpansion&Set "separator="
For /F "Skip=4Tokens=1*Delims=:" %%A In ('Mode CON')Do (For /L %%C In (1,1,%%B)Do Set "separator=!separator!-")&GoTo :Next
:Next
Rem Uncomment the next line if you don't want to use delayed expansion in the rest of the script
::EndLocal&Set "separator=%separator%"
Rem Your code goes here
Echo Welcome to %~nx0
Echo %separator%
Pause

В дополнение ко всему вышесказанному, вы также можете использовать , чтобы сделать это тоже:

@Echo Off
For /F %%A In ('Powershell -NoP "Write-Host('-' * $(Get-Host).UI.RawUI.WindowSize.Width)"')Do Set "separator=%%A"
Echo Welcome to %~nx0
Echo %separator%
Pause
1 голос
/ 03 апреля 2019

Если вы можете работать с пакетными командами, извлеките значение columns, вы можете использовать вывод команды MODE;

    MODE CON  
C:\Users\gjp>mode con

Status for device CON:  
----------------------  
    Lines:          9001  
    Columns:        120  
    Keyboard rate:  31  
    Keyboard delay: 1  
    Code page:      850  
0 голосов
/ 03 апреля 2019

Я бы предложил вам использовать следующий код:

@echo off
setlocal EnableDelayedExpansion

for /F "skip=4 tokens=2" %%A IN ('mode CON') do (
    for /L %%B IN (1 1 %%A) do set "hyphen=!hyphen!-"
    echo !hyphen!
    goto :subroutine
)

:subroutine
echo You may continue here
pause

, что немного сложно, но должно делать то, что вы хотите.

Код ищет столбцы в выводе команды mode CON и добавляет их к переменной hyphen соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...