You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决批处理脚本中cls命令导致的控制台闪烁问题?

控制台动画闪烁及PowerShell实现问题

我正在开发一个带动画开头的批处理脚本,原本计划在每一帧前用cls命令清除控制台,但这导致了严重的闪烁问题。

批处理代码

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

::
:loop
cls
for /L %%A in (1,1,20) do (
    cls
    call :frame %%A
    ping -n 1 -w 300 127.0.0.1 >nul
)
goto loop

goto :eof

:frame
:: full letters
set "letters1=  █     █░▓█████  ██▓     ▄████▄   ▒█████   ███▄ ▄███▓▓█████"
set "letters2= ▓█░ █ ░█░▓█   ▀ ▓██▒    ▒██▀ ▀█  ▒██▒  ██▒▓██▒▀█▀ ██▒▓█   ▀"
set "letters3= ▒█░ █ ░█ ▒███   ▒██░    ▒▓█    ▄ ▒██░  ██▒▓██    ▓██░▒███"
set "letters4= ░█░ █ ░█ ▒▓█  ▄ ▒██░    ▒▓▓▄ ▄██▒▒██   ██░▒██    ▒██ ▒▓█  ▄"
set "letters5= ░░██▒██▓ ░▒████▒░██████▒▒ ▓███▀ ░░ ████▓▒░▒██▒   ░██▒░▒████▒"
set "letters6= ░ ▓░▒ ▒  ░░ ▒░ ░░ ▒░▓  ░░ ░▒ ▒  ░░ ▒░▒░▒░ ░ ▒░   ░  ░░░ ▒░ ░"
set "letters7=   ▒ ░ ░   ░ ░  ░░ ░ ▒  ░  ░  ▒     ░ ▒ ▒░ ░  ░      ░ ░ ░  ░"
set "letters8=   ░   ░     ░     ░ ░   ░        ░ ░ ░ ▒  ░      ░      ░"
set "letters9=     ░       ░  ░    ░  ░░ ░          ░ ░         ░      ░  ░"
set "letters10=                         ░"

:: play dripping effect by changing characters in the lines 5, 6, 7, 8, 9
if %1 lss 5 (
    set "letters5=%letters5:▒= %"
) else if %1 lss 10 (
    set "letters6=%letters6:░= %"
) else if %1 lss 15 (
    set "letters7=%letters7:▒= %"
) else if %1 lss 20 (
    set "letters8=%letters8:░= %"
) else if %1 lss 25 (
    set "letters9=%letters9:▓= %"
)

:: display the letters with the "dripping" effect
echo.
echo !letters1!
echo !letters2!
echo !letters3!
echo !letters4!
if defined letters5 echo !letters5!
if defined letters6 echo !letters6!
if defined letters7 echo !letters7!
if defined letters8 echo !letters8!
if defined letters9 echo !letters9!
echo !letters10!
goto :eof

随后我尝试用PowerShell实现,但连第二帧都无法显示,代码如下:

PowerShell代码

# UTF-8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# define the letters for the animation
$lines = @(
    "  █     █░▓█████  ██▓     ▄████▄   ▒█████   ███▄ ▄███▓▓█████",
    " ▓█░ █ ░█░▓█   ▀ ▓██▒    ▒██▀ ▀█  ▒██▒  ██▒▓██▒▀█▀ ██▒▓█   ▀",
    " ▒█░ █ ░█ ▒███   ▒██░    ▒▓█    ▄ ▒██░  ██▒▓██    ▓██░▒███",
    " ░█░ █ ░█ ▒▓█  ▄ ▒██░    ▒▓▓▄ ▄██▒▒██   ██░▒██    ▒██ ▒▓█  ▄",
    " ░░██▒██▓ ░▒████▒░██████▒▒ ▓███▀ ░░ ████▓▒░▒██▒   ░██▒░▒████▒",
    " ░ ▓░▒ ▒  ░░ ▒░ ░░ ▒░▓  ░░ ░▒ ▒  ░░ ▒░▒░▒░ ░ ▒░   ░  ░░░ ▒░ ░",
    "   ▒ ░ ░   ░ ░  ░░ ░ ▒  ░  ░  ▒     ░ ▒ ▒░ ░  ░      ░ ░ ░  ░",
    "   ░   ░     ░     ░ ░   ░        ░ ░ ░ ▒  ░      ░      ░  ░",
    "     ░       ░  ░    ░  ░░ ░          ░ ░         ░      ░  ░",
    "                         ░"
)

# loop for animation
while ($true) {
    # clear the console
    Clear-Host

    # loop through each line to create the dripping effect
    for ($i = 0; $i -lt $lines.Count; $i++) {
        $line = $lines[$i]
        
        # change certain characters based on their index
        if ($i -ge 4 -and $i -lt 9) {
            if ($i -eq 4) { $line = $line -replace '▒', ' ' }
            elseif ($i -eq 5) { $line = $line -replace '░', ' ' }
            elseif ($i -eq 6) { $line = $line -replace '▒', ' ' }
            elseif ($i -eq 7) { $line = $line -replace '░', ' ' }
            elseif ($i -eq 8) { $line = $line -replace '▓', ' ' }
        }
        
        # the modified line
        Write-Host $line
    }

    # wait before refreshing the display
    Start-Sleep -Milliseconds 300
}

用于执行该PowerShell文件的批处理代码:

执行PowerShell的批处理代码

@echo off
chcp 65001 >nul
PowerShell -NoProfile -ExecutionPolicy Bypass -File "%~dp0drip-animation.ps1"
pause

内容的提问来源于stack exchange,提问作者Marios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:47:09