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

如何编写批处理文件生成无变形的ASCII正方形?[BATCH]

实现自适应字符长度的ASCII正方形输出

核心思路

要让ASCII正方形不随字符长度变形,关键是根据正方形的固定宽度,动态调整内容的显示方式:

  • 当字符长度小于正方形内容区域宽度时,通过填充空格让内容在区域内对齐(居中/左/右对齐可按需选择)
  • 当字符长度超过内容区域宽度时,截断字符到区域允许的最大长度,避免超出边界

针对Windows批处理的实现

从set pseudo=test1命令判断你使用的是Windows批处理,可通过以下代码实现:

@echo off
setlocal enabledelayedexpansion

:: 自定义正方形参数
set "square_width=20"          :: 正方形总宽度(含左右边框)
set "pseudo=dqzdijqzodijqzdoij":: 要显示的变量

:: 计算字符串长度
set "target_str=!pseudo!"
set "str_len=0"
:calc_length
if "!target_str:~%str_len%!" neq "" (
    set /a str_len+=1
    goto calc_length
)

:: 计算内容区域宽度(减去左右边框的2个字符)
set /a content_width=square_width - 2

:: 处理显示字符串
if !str_len! gtr !content_width! (
    :: 字符过长,截断到内容区域宽度
    set "display_str=!pseudo:~0,!content_width!!"
) else (
    :: 字符长度合适,计算居中对齐的左右填充空格
    set /a left_pad=(content_width - str_len)/2
    set /a right_pad=content_width - str_len - left_pad
    
    :: 生成填充空格
    set "left_spaces="
    for /l %%i in (1,1,!left_pad!) do set "left_spaces=!left_spaces! "
    set "right_spaces="
    for /l %%i in (1,1,!right_pad!) do set "right_spaces=!right_spaces! "
    
    set "display_str=!left_spaces!!pseudo!!right_spaces!"
)

:: 输出正方形边框和内容
set "border="
for /l %%i in (1,1,!square_width!) do set "border=!border!="
echo !border!
echo ^|!display_str!^|
echo !border!

代码说明:

  1. 启用enabledelayedexpansion确保循环中变量能实时更新
  2. 通过循环计算目标字符串的长度
  3. 根据字符串长度与内容区域宽度的对比,选择截断或填充空格
  4. 循环生成统一长度的边框,保证正方形形状一致

如果需要左/右对齐,只需修改填充逻辑:

  • 左对齐:仅计算右侧填充空格set /a right_pad=content_width - str_len,直接拼接!pseudo!!right_spaces!
  • 右对齐:仅计算左侧填充空格set /a left_pad=content_width - str_len,直接拼接!left_spaces!!pseudo!

针对Python的实现(更简洁)

如果使用Python,利用字符串内置方法可以快速实现:

square_width = 20
pseudo = "dqzdijqzodijqzdoij"
content_width = square_width - 2

# 处理显示字符串:过长截断,否则居中对齐
if len(pseudo) > content_width:
    display_str = pseudo[:content_width]
else:
    display_str = pseudo.center(content_width)  # 换成ljust()左对齐,rjust()右对齐

# 输出正方形
border = "=" * square_width
print(border)
print(f"|{display_str}|")
print(border)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:45:37