如何解决批处理(batch)文件echo写入文件时多出额外换行的问题
原因分析
- cmd 中
echo命令默认会在输出内容末尾自动追加 2 字节的回车换行符(\r\n),这就是文件末尾出现空行的原因 - 你现有代码中
%scor%和重定向符>之间的空格也会被写入文件,额外占用 1 字节 - 你原来只减去了换行占的2字节,没处理多余空格占的1字节,所以最终计算结果比实际长度多1
修复方案
方案1:修改写入逻辑,保留临时文件方案
用 set /p 技巧实现无额外字符的变量写入,不会追加换行也不会多写空格,不需要额外减字节:
:: 这里替换为你自己的scor变量赋值 set scor=你的测试内容 :: 无多余字符写入变量到文件 set /p "=%scor%" <nul > scorfile.txt FOR %%? IN (scorfile.txt) DO ( SET /A scorlength=%%~z? ) :: 你原来的业务判断逻辑需要可以保留 if %scorlength%==12 set /a scorlength=1 del /Q scorfile.txt echo %scorlength% pause
方案2:无需临时文件,直接计算变量长度
如果不想生成临时文件,可以用通用的批处理变量长度计算函数,稳定性和性能更好:
@echo off setlocal enabledelayedexpansion :: 这里替换为你自己的scor变量赋值 set scor=你的测试内容 call :strlen scorlength scor :: 你原来的业务判断逻辑需要可以保留 if %scorlength%==12 set /a scorlength=1 echo %scorlength% pause :: 变量长度计算函数 :strlen <返回长度的变量名> <要计算的变量名> ( set "s=!%~2!" set "len=0" for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" set "s=!s:~%%P!" ) ) ) ( endlocal set "%~1=%len%" exit /b )
内容的提问来源于stack exchange,提问作者WeeTomatoBall
相关产品推荐
相关产品推荐

