如何编写批处理文件生成无变形的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!
代码说明:
- 启用
enabledelayedexpansion确保循环中变量能实时更新 - 通过循环计算目标字符串的长度
- 根据字符串长度与内容区域宽度的对比,选择截断或填充空格
- 循环生成统一长度的边框,保证正方形形状一致
如果需要左/右对齐,只需修改填充逻辑:
- 左对齐:仅计算右侧填充空格
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
相关产品推荐
相关产品推荐

