为什么我用批处理命令删除文本中的空行后,文本中会出现很多的"ECHO 处于关闭状态"? 怎么解决?

用的代码是下面这段:
@echo off
for %%a in (*.txt) do (
for /f "tokens=*" %%b in ('type "%%a"') do echo %%b>>"1%%a"
del "%%a"
ren "1%%a" "%%a"
)

for /f 命令可去空行,因为有些行并不是完全空行,而是带有个数不定的空格,而对于echo 后只有空格的命令会显示echo的设置状态,但是用if not "%%b"==" "形式并不能表达不定数的空格,依然可能出错,帮你改写为:
@echo off
for %%a in (*.txt) do (cls&echo 正在处理 %%a
findstr/rvc:"^ *$" "%%a">"1%%a"
move "1%%a" "%%a")
cls&echo ok
ping -n 2 127.1>nul
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-11
echo %%b>>"1%%a"你这里不是写了吗,把所有的文件显示出来,由于存在空行,所以当然无法显示咯。你可以加入一条if命令,if not "%%b"==" " echo %%b>>"1%%a" 就可以了略过为空时的状态了。追问

if命令加在哪句后面啊?
不是echo off命令就是指不回显嘛,在前面再加上@就连这条命令本身也不显示
我的理解对不对?
我用上面的那段代码处理文本,有的正常,有的就在原本空行处显示:"ECHO 处于关闭状态"
是不是待处理文本本身的空行格式的不同造成的啊?比较空格形成的空行和回车形成的空行。

追答

空格可以比较,但不能够显示,所以出现你的现象。 if语句加在do的后面,你现在已经关闭全部回显了@echo off ,所以你再加和没加是一样的效果。

本回答被提问者采纳
第2个回答  2011-07-11
最简单的改法是在echo后加个"."
@echo off
for %%a in (*.txt) do (
for /f "tokens=*" %%b in ('type "%%a"') do echo.%%b>>"1%%a"
del "%%a"
ren "1%%a" "%%a"
)
第3个回答  2011-07-25
setlocal enabledelayedexpansion
@echo off
for %%a in (*.txt) do (
for /f "tokens=*" %%b in ('type "%%a"') do echo %%b>>"1%%a"
del "%%a"
ren "1%%a" "%%a"
)

注意变量延迟
相似回答