中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 06:16
48,040 主题排行 / 350,125 发帖 / 今日 1 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » echo的一些奇怪问题
可打印版本  1,410 / 6
第1楼 jialot 发表于 2007-12-30 23:02
初级用户 发帖 11 积分 36
echo的一些奇怪问题
本人外行,高手莫笑
用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楼 fastslz 发表于 2007-12-30 23:14
铂金会员 发帖 2,315 积分 5,493 来自 上海
通常>前面的字符是0、1、2的话都要加转定义符^


或者用这个代码
第3楼 terse 发表于 2007-12-30 23:14
银牌会员 发帖 946 积分 2,404
试试这样:
>1.txt echo 第1行=1
>>1.txt echo 第2行=2
>>1.txt echo 第3行=3
..................
第4楼 jialot 发表于 2007-12-30 23:23
初级用户 发帖 11 积分 36
谢谢各位,上述方法可行
但我还是不明白
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楼 fastslz 发表于 2007-12-30 23:40
铂金会员 发帖 2,315 积分 5,493 来自 上海




第6楼 cndos 发表于 2007-12-30 23:47
新手上路 发帖 1 积分 2
说穿了不过是重定向的通道而已
在重定向符号前面加数字0~9
代表重定向不同的通道
0是标准输入
1是标准输出
2是标准错误
3~9则是未定义的通道
第7楼 lovealei 发表于 2008-01-08 01:46
新手上路 发帖 3 积分 8
先谢谢大家了,我虽然还不明白,但总算有点思路了

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

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

大家帮忙看看,我去试试!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023