【问题标题】:Set a defined stdout output area for Windows batch output?为 Windows 批量输出设置定义的标准输出输出区域?
【发布时间】:2017-06-18 02:40:20
【问题描述】:

我有一个 Windows 批处理,它可以做一些事情。 (相当长的 VM 任务,使用 QEMU 和 Lua)。

我想将来自批处理的 echo 和调用命令 (stdout) 的所有标准输出通过管道传输到 Windows Consule 显示窗口的定义部分,以便在输出显示时在窗口的顶部和底部绘制一个灰色的标题栏脚本在做什么。

有点像文本区域,自动换行并像 CMD 窗口一样滚动,在窗口的定义部分(复古示例,DOOM wad 加载器,在运行期间将红色标题栏放在顶部和底部)初始化,但在这里我希望它选择不那么烦人的颜色)。

我想知道这是否可以合理地在批处理文件或批处理文件可以通过管道传输到的可执行包装器中完成,它将其标准输出发送到哪里?


编辑:更新 1

建议:PowerShell?

嵌入 PowerShell 来完成控制台窗口的设置一切都很好,但请记住,大多数公平的人将 PowerShell 执行权限设置为受限。这意味着添加自动提升 VBScript 和 PowerShell 权限调整器/自动解除阻止器/受限权限恢复会增加不必要的批量,并在我的脚本中添加一个烦人的 UAC 提示。

此建议还存在使智能 AV 因此类脚本的多语言扩展功能而误报的风险。

建议:ANSI 转义字符

我想说,对于高效批处理来说非常棘手。我知道倒置的灰色,它将充分显示标题栏。现在答案已经指向正确的方向。是否有 ANSI 转义序列来调整输出缓冲区?如果您调整 Consule Window 的代码页,此建议不会明确锁定到 Windows 10。

【问题讨论】:

  • 这种事情非常讨厌成批的。这在技术上是可行的,但我强烈建议不要这样做。
  • 考虑到这个特定的脚本运行时间较长并且需要向用户显示图形状态,我认为这样做是可行的。这是一个远程控制 VM 脚本批处理。我想让用户有一些东西可以看,尤其是在碎片整理和归零可用空间等操作期间,以准备调整大小。我们不是在谈论彩虹效果,只是一个简单的灰色上/下条,宣布其扩展存在。
  • 我推荐power shell,可以用PS,还是要专门批?
  • 如果你使用的是win10,你可以使用ansi转义序列

标签: windows batch-file stdout


【解决方案1】:

一个带有 ansi 转义序列的小样本。
它将屏幕分成两个单独的区域, 前 10 行固定不滚动,下面的区域使用滚动。

@echo off
call :cls
call :setWindowSize 50 120
call :setWindowPos 1040 0
call :splitWindow 11
call :gotoxy 1 1
for /L %%n in (1 1 5) do (
    echo Job: %%n
)
call :gotoxy 1 20
for /L %%n in (1 1 50) do (
    echo Cnt: %%n
)
exit /b

:setWindowSize
set "lines=%1
set "columns=%2"
call :echo-e "\e[8;%lines%;%columns%t";

:gotoxy
set "y=%1"
set "x=%2"
call :echo-e "\e[%x%;%y%H"
exit /b

:cls
call :echo-e "\e[2J"
exit /b

:setWindowPos
set "x=%1"
set "y=%2"
call :echo-e "\e[3;%x%;%y%t";
exit /b

:splitWindow
set /a "pos=%1 - 1"
call :echo-e "\ec\e[2J\e[%1;80r\e[%pos%H\e[46m\e[K\e[0m"
exit /b

:windowToFront
call :echo-e "\e[2t""\e[1t"
exit /b

:echo-e
set "arg1=%~1"
setlocal EnableDelayedExpansion
set "arg1=!arg1:\x=0x!"
set "arg1=!arg1:\e=0x1B!"
forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c <nul set /p 0x22=!arg1!0x22"
exit /b

【讨论】:

  • 谢谢!这正是我清理脚本输出所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 2021-10-20
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
相关资源
最近更新 更多