如何在纯Batch文件中使用Reverse Line Feed实现带边框输入提示框
Windows批处理反向换行实现方案
Windows 原生批处理不存在全版本兼容、无需额外依赖的 Reverse Line Feed(反向换行)对应实现,cmd 本身默认不识别反向换行的控制字符,也无法仅通过内置命令生成可直接生效的对应控制符。
你可以通过以下两种纯内置命令方案实现你要的带边框输入效果,全程无需调用任何外部程序:
方案1:全Windows版本兼容实现
无需开启任何系统特性,兼容所有Windows版本,调整输出顺序即可达到等效视觉效果:
@echo off setlocal enabledelayedexpansion :: 生成回车符 for /f %%a in ('copy "%~f0" nul /z') do set "cr=%%a" :: 生成换行符,此命令后必须保留2个空行 set lf=^ :: 输出顶边框、提示行、输入行占位 set /p "=*************************************************************************************!lf!!cr!* Enter the Street Address of this Store. [Use as many characters as you need] *!lf!!cr!* Address:_____________________________________________________________________ *!cr!* Address:" <nul :: 等待用户输入 set /p "var=" :: 输入完成后输出底边框 echo !lf!!cr!************************************************************************************* endlocal
方案2:Win10 1607及以上版本可用
如果运行环境为Win10 1607及以上系统,可以通过开启虚拟终端转义序列实现光标上移,等效于反向换行效果,支持预先显示完整边框:
@echo off setlocal enabledelayedexpansion :: 生成回车符 for /f %%a in ('copy "%~f0" nul /z') do set "cr=%%a" :: 生成换行符,此命令后必须保留2个空行 set lf=^ :: 生成ESC控制符 for /f %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a" :: !ESC![1A 为光标上移1行的转义序列,等效反向换行 set /p "var=*************************************************************************************!lf!!cr!* Enter the Street Address of this Store. [Use as many characters as you need] *!lf!!cr!* Address:_____________________________________________________________________ *!lf!!cr!*************************************************************************************!ESC
