如何解决批处理脚本中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
相关产品推荐
相关产品推荐

