2015-09-04 114 views
0

我有一个关于MODE批处理命令的问题。使用批处理脚本获取命令窗口的行数和列数

以下代码允许我将控制台窗口大小调整为200行的10行。

mode con cols=200 lines=10 

是否还有一种方法来读出当前设置的行数和列数?

所以,对于上述COL = 200条线的示例= 10应返回。

任何答复表示赞赏。

+0

有你自己尝试新鲜事物这么远?如果不是的话:一个好的起点是使用'/ F'语法来解析命令的输出 - for''for /?';请记住,SO不是一种编码服务......谢谢! – aschipfl

+1

尝试不带参数的'mode'。使用'for'解析输出(aschimpfl已建议) – Stephan

+0

我不是批处理专家。我已经搜索了互联网和批处理文档很长,没有发现任何用处。我会尝试你所建议的。只有启动模式是一个很好的提示,因为它似乎包含相关信息。因此解析它可能会导致解决方案。谢谢... – Rickson

回答

3

生成代码的步骤:

一)使用mode以获得所需的数据。

mode 

a1)中得到的输出仅所需的设备:

mode con 

B)滤波器对 “列” 和 “行”,以去掉不需要的信息的:

mode con|findstr "Zeilen Spalten" 

c)中使用for /f解析命令的输出并设置变量。看看输出的结构,并找到合适的令牌和分隔符:

for /f "Tokens=1,2 delims=: " %%a in ('mode con^|findstr "Zeilen Spalten"') do set %%a=%%b 

适应“Zeilen”和“Spalten”你(取决于语言)的mode输出

C:\>mode con 

Status von Gerät CON: 
--------------------- 
    Zeilen:   300 
    Spalten:   120 
    Wiederholrate: 31 
    Verzögerungszeit:1 
    Codepage:  850 


C:\>for /f "tokens=1,2 delims=: " %a in ('mode con^|findstr "Zeilen Spalten"') do @echo set %a=%b 
set Zeilen=300 
set Spalten=120 

C:\> 
+0

完美地工作。谢谢! – Rickson

+0

只是在另一台电脑上试过。将'mode'替换为'mode con'以仅为控制台设备(终端)输出。 (除了控制台列表中的线或列以外,没有_my_设备,但谁知道 - 最好是精确的) – Stephan

0

这种方法应该工作在任何区域(与语言无关):

@echo off 
setlocal 

set "lines=" 
set "cols=" 
for /F "tokens=2 delims=:" %%a in ('mode con') do for %%b in (%%a) do (
    if not defined lines (
     set "lines=%%b" 
    ) else if not defined cols (
     set "cols=%%b" 
    ) 
) 
echo cols=%cols% lines=%lines% 
0

这里是一个小的批处理文件,返回行和列的数量和存储它们的值%LINES%%COLS%。反对@斯蒂芬的伟大answer提供直接键入命令提示符下,这个脚本不依赖于系统语言)一个班轮:

@echo off 

set LINES= 
set COLS= 
for /F "skip=2 tokens=2 delims=: " %%L in (
    'mode CON:' 
) do (
    if defined LINES (
    set COLS=%%L 
    goto :QUIT 
) else (
    set LINES=%%L 
) 
) 
:QUIT 
echo %LINES% lines, %COLS% columns