批量查找当前控制台大小

时间:2019-04-03 15:25:52

标签: batch-file windows-10

我正在处理批处理文件,我需要在屏幕上打印连字符(-)作为分隔符。是否有 fast (不到两秒钟)命令可以做到这一点?

我已经进行了多次搜索查询,但无法在各种网站上找到答案。

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

输出应在控制台上显示一行连字符。

3 个答案:

答案 0 :(得分:1)

如果可以计算出批处理命令来检索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  

答案 1 :(得分:0)

这未经测试,但基于gjpio的答案中来自Mode CON的输出:

@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

答案 2 :(得分:0)

我建议您使用以下代码:

@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变量中。