找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24176|回复: 5

[特效代码] 求助 批处理字符显示显示在CMD窗口中间

[复制链接]
发表于 2020-8-14 10:51:36 | 显示全部楼层 |阅读模式
如何在不改变CMD窗口的尺寸下,让输出字符显示在窗口中间?
发表于 2020-8-14 12:48:37 | 显示全部楼层
用制表符或空格控制缩进
发表于 2020-8-14 12:51:27 | 显示全部楼层
WIN 10 有效
  1. @echo off
  2. for /F %%a in ('echo prompt $E^| cmd') do set "_ESC=%%a"

  3. for /f "tokens=3,4 delims=, " %%A in (
  4.   'powershell -command "&{$H=get-host;$H.ui.rawui;}"^|findstr /b WindowSize'
  5. ) do set /a "_win_wid=%%A, _win_hei=%%B"

  6. set "str=hello world."
  7. set /a "y=_win_hei/2,x=_win_wid/2-6"
  8. set "_RGB_FACE=255;0;0"
  9. <nul set /p "=%_ESC%[38;2;%_RGB_FACE%m"
  10. <nul set /p "=%_ESC%[%y%;%x%H%str%

  11. set "str=VT100 on Windows 10"
  12. set /a "y=_win_hei/2+1,x=_win_wid/2-9"
  13. set "_RGB_FACE=0;255;0"
  14. <nul set /p "=%_ESC%[38;2;%_RGB_FACE%m"
  15. <nul set /p "=%_ESC%[%y%;%x%H%str%
  16. pause>nul
复制代码
 楼主| 发表于 2020-8-14 14:03:39 | 显示全部楼层
回复 3# a20150604


    WIN7下有没有效呢?
发表于 2020-8-14 18:05:29 | 显示全部楼层
回复 4# enpany

仅 Win 10 有效
来个简单特效
  1. @echo off & setlocal enabledelayedexpansion
  2. REM VT100 参考
  3. REM https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

  4. for /F %%a in ('echo prompt $E^| cmd') do set "_ESC=%%a"

  5. REM 窗口尺寸也可以不指定
  6. mode 100,40

  7. REM 移动周期: 正整数, 越小, 移动越快
  8. set /a "cycle=2000"

  9. set "rgb_red=%_ESC%[38;2;255;0;0m"
  10. set "rgb_grn=%_ESC%[38;2;0;255;0m"
  11. set "rgb_blu=%_ESC%[38;2;0;0;255m"
  12. REM set       "str=bbs.bathome.net"
  13. set       "str=%rgb_red%bbs.%rgb_grn%bathome%rgb_blu%.net"
  14. set "str_clear=%rgb_red%bbs.%rgb_grn%       %rgb_blu%.net"

  15. for /f "tokens=3,4 delims=, " %%A in (
  16.     'powershell -command "&{$H=get-host;$H.ui.rawui;}"^|findstr /b WindowSize'
  17. ) do set /a "_win_wid=%%A, _win_hei=%%B, x_ubound=_win_wid-14" & REM 14 为 str 的长度 - 1

  18. set /a "y= !random! %% _win_hei + 1, x= !random! %% x_ubound + 1"
  19. set /a "dx=dy=1"

  20. REM 隐藏光标 Hide the cursor
  21. <nul set /p "=%_ESC%[?25l"

  22. for /l %%a in (-9999999 1 9999999) do (
  23.     set /a "m=%%a %% cycle"
  24.     if !m!==0 (
  25.         <nul set /p "=%_ESC%[!y!;!x!H%str_clear%"

  26.         if !y! geq !_win_hei! set /a "dy=-1"
  27.         if !y! leq 1 set /a "dy=1"
  28.         if !x! geq !x_ubound! set /a "dx=-1"
  29.         if !x! leq 1 set /a "dx=1"
  30.         set /a "y+=dy,x+=dx"
  31.         <nul set /p "=%_ESC%[!y!;!x!H%str%"
  32.     )
  33. )
复制代码
 楼主| 发表于 2020-8-14 18:40:21 | 显示全部楼层
回复 5# a20150604


    膜拜大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:02 , Processed in 0.020026 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表