echo命令向文件写入大量空格问题求助
我来帮你拆解这个问题,你遇到的情况大概率是以下两种原因之一:
1. 脚本里的命令没正确分开
看你贴的脚本代码,所有set和echo命令都挤在同一行里了!在Windows批处理里,同一行要执行多个命令的话,必须用&符号把它们分开,不然系统会把后面的命令当成前一个命令的一部分来解析。
比如你原来的代码:
set "rec1=01%YYYYMMDD%xxxxxx xxxxxxx0935" set "rec2=99%YYYYMMDD% 000000000000000000000000000000000000000935" echo %rec1%>X:\BUBK_test.txt echo %rec2%>>X:\BUBK_test.txt
系统会错误地把第一个set的变量rec1的值设成:01%YYYYMMDD%xxxxxx xxxxxxx0935" set "rec2=99%YYYYMMDD% 000000000000000000000000000000000000000935" echo %rec1%
后面的set rec2和echo命令全被混进了rec1的取值里,输出到文件时自然会出现一堆多余的空格和无效内容。
2. 变量赋值行的末尾不小心加了空格
如果你的脚本是分行写的,但在set "rec2=..."这一行的结尾不小心敲了好多空格,那也要注意:批处理里用set "var=value"这种带双引号的写法时,双引号里的所有内容(包括末尾的空格)都会被当成变量值的一部分。这些空格跟着935一起被echo到文件里,就会出现你看到的“大量空格”。
针对这两种情况,分别调整就行:
情况1:把命令分开写
要么把每个命令单独占一行(推荐,看起来更清楚),要么用&把同一行的命令隔开:
set "rec1=01%YYYYMMDD%xxxxxx xxxxxxx0935" set "rec2=99%YYYYMMDD% 000000000000000000000000000000000000000935" echo %rec1%>X:\BUBK_test.txt echo %rec2%>>X:\BUBK_test.txt
情况2:删掉赋值行末尾的空格
仔细检查set "rec2=..."那一行,把行尾多余的空格删掉,确保双引号里只有你需要的内容:
# 错误示例(行尾有多余空格) set "rec2=99%YYYYMMDD% 000000000000000000000000000000000000000935" # 正确示例(行尾干净无空格) set "rec2=99%YYYYMMDD% 000000000000000000000000000000000000000935"
另外,如果你担心变量为空时echo会输出多余内容,可以改成echo(%rec2%>>X:\BUBK_test.txt的写法,既能避免空变量的问题,也能保证输出内容准确。
内容的提问来源于stack exchange,提问作者Zalek Bloom

