中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-27 03:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » echo的一些奇怪问题 查看 1,376 回复 6
楼 主 echo的一些奇怪问题 发表于 2007-12-30 23:02 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 36
发帖 11
注册 2007-11-21 15:24
18年会员
UID 103328
性别 男
状态 离线
本人外行,高手莫笑
用ECHO做个文本,发现以下问题,请高手解释下:
>前面没空格,是不想输出到文本有空格
一:
@echo off
echo 第1行=1>1.txt
echo 第2行=2>>1.txt
echo 第3行=3>>1.txt
echo 第4行=4>>1.txt
echo 第5行=5>>1.txt
echo 第6行=6>>1.txt
echo 第7行=7>>1.txt
echo 第8行=8>>1.txt
echo 第9行=9>>1.txt
echo 第10行=10>>1.txt
echo 第11行 1>>1.txt
echo 第12行 2>>1.txt
echo 第13行 3>>1.txt
echo 第14行 4>>1.txt
echo 第15行 5>>1.txt
echo 第16行 6>>1.txt
echo 第17行 7>>1.txt
echo 第18行 8>>1.txt
echo 第19行 9>>1.txt
echo 第20行 10>>1.txt
echo 第21行=11>>1.txt
echo 第22行 12>>1.txt
echo 第23行=1 >>1.txt
echo 第24行=2 >>1.txt
echo 第25行 1 >>1.txt
echo 第26行 2 >>1.txt
exit

输出的1.txt如下:
第1行=
第10行=10
第11行
第20行 10
第21行=11
第22行 12
第23行=1
第24行=2
第25行 1
第26行 2

问题:
1.第1行“第1行=1”输出成“第1行=”(1没了)
2.第11行的“第11行 1”变成“第11行 ”(空格在,1没了)
3.第2-9行及12-19行消失了
4.当数字为2位数字或>前带空格,则一切正常

但是如果在每个>前加个符号,比如“晕”,再把晕字替换掉,又一些正常
echo 第1行=1晕>1.txt
echo 第2行=2晕>>1.txt
echo 第3行=3晕>>1.txt
echo 第4行=4晕>>1.txt
echo 第5行=5晕>>1.txt
echo 第6行=6晕>>1.txt
echo 第7行=7晕>>1.txt
echo 第8行=8晕>>1.txt
echo 第9行=9晕>>1.txt
echo 第10行=10晕>>1.txt
echo 第11行 1晕>>1.txt
echo 第12行 2晕>>1.txt
echo 第13行 3晕>>1.txt
echo 第14行 4晕>>1.txt
echo 第15行 5晕>>1.txt
echo 第16行 6晕>>1.txt
echo 第17行 7晕>>1.txt
echo 第18行 8晕>>1.txt
echo 第19行 9晕>>1.txt
echo 第20行 10晕>>1.txt
echo 第21行=11晕>>1.txt
echo 第22行 12晕>>1.txt
echo 第23行=1晕>>1.txt
echo 第24行=2晕>>1.txt
echo 第25行 1晕>>1.txt
echo 第26行 2晕>>1.txt
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
set var=%%i
set "var=!var:晕=!"
echo !var!>>2.txt
)
del 1.txt
ren 2.txt 1.txt

[ Last edited by jialot on 2007-12-30 at 11:09 PM ]
2 发表于 2007-12-30 23:14 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
通常>前面的字符是0、1、2的话都要加转定义符^

@echo off
echo 第1行=^1>1.txt
echo 第2行=^2>>1.txt
echo 第10行=1^0>>1.txt

或者用这个代码
@echo off
>1.txt echo 第1行=1
>>1.txt echo 第2行=2
>>1.txt echo 第3行=3
>>1.txt echo 第4行=4
>>1.txt echo 第5行=5
>>1.txt echo 第6行=6
>>1.txt echo 第7行=7
>>1.txt echo 第8行=8
>>1.txt echo 第9行=9
>>1.txt echo 第10行=10
>>1.txt echo 第11行 1
>>1.txt echo 第12行 2
>>1.txt echo 第13行 3
>>1.txt echo 第14行 4
>>1.txt echo 第15行 5
>>1.txt echo 第16行 6
>>1.txt echo 第17行 7
>>1.txt echo 第18行 8
>>1.txt echo 第19行 9
>>1.txt echo 第20行 10
>>1.txt echo 第21行=11
>>1.txt echo 第22行 12
>>1.txt echo 第23行=1
>>1.txt echo 第24行=2
>>1.txt echo 第25行 1
>>1.txt echo 第26行 2
exit
第一高手 第二高手

3 发表于 2007-12-30 23:14 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
试试这样:
>1.txt echo 第1行=1
>>1.txt echo 第2行=2
>>1.txt echo 第3行=3
..................
简单!简单!再简单!
4 发表于 2007-12-30 23:23 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 36
发帖 11
注册 2007-11-21 15:24
18年会员
UID 103328
性别 男
状态 离线
谢谢各位,上述方法可行
但我还是不明白
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
set var=%%i
set "var=!var:晕=!"
echo !var!>>2.txt
)
del 1.txt
ren 2.txt 1.txt
这段里面也有echo !var!>>2.txt,为何又可以正常输出呢?
5 发表于 2007-12-30 23:40 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
setlocal enabledelayedexpansion
echo 0>2.txt


setlocal enabledelayedexpansion
echo !0>2.txt
echo !>>2.txt


setlocal enabledelayedexpansion
echo !0>2.txt
endlocal
echo !>>2.txt
第一高手 第二高手

6 发表于 2007-12-30 23:47 ·  中国 江西 南昌 电信
新手上路
积分 2
发帖 1
注册 2005-11-02 19:27
20年会员
UID 44491
状态 离线
说穿了不过是重定向的通道而已
在重定向符号前面加数字0~9
代表重定向不同的通道
0是标准输入
1是标准输出
2是标准错误
3~9则是未定义的通道
7 发表于 2008-01-08 01:46 ·  中国 云南 玉溪 电信
新手上路
积分 8
发帖 3
注册 2005-07-15 18:52
20年会员
UID 40748
状态 离线
先谢谢大家了,我虽然还不明白,但总算有点思路了

下面这段代码是朋友给我的

cd ghost
if exist WATTCP.CFG del WATTCP.CFG >nul


md ip

SET ip=1

if exist ip\1.ip SET ip=2
...more...

if exist ip\253.ip SET ip=254

if "%ip%" == "1" echo. >ip\1.ip

echo IP=192.168.2.%ip%> Wattcp.cfg


if "%ip%" == "2" ren ip\1.ip 2.ip

...more...

if %ip% == 254 ren ip\253.ip 254.ip


REM echo IP=192.168.2.%1> Wattcp.cfg

echo NETMASK=255.255.255.0>> Wattcp.cfg
echo GATEWAY=192.168.2.251>> Wattcp.cfg

大家帮忙看看,我去试试!
论坛跳转: